小编BMi*_*ner的帖子

在JavaScript中将JSON字符串解析为特定对象原型

我知道如何解析JSON字符串并将其转换为JavaScript对象.您可以JSON.parse()在现代浏览器(和IE9 +)中使用.

这很好,但是如何将JavaScript对象转换为特定的 JavaScript对象(即使用某个原型)?

例如,假设你有:

function Foo()
{
   this.a = 3;
   this.b = 2;
   this.test = function() {return this.a*this.b;};
}
var fooObj = new Foo();
alert(fooObj.test() ); //Prints 6
var fooJSON = JSON.parse({"a":4, "b": 3});
//Something to convert fooJSON into a Foo Object
//....... (this is what I am missing)
alert(fooJSON.test() ); //Prints 12
Run Code Online (Sandbox Code Playgroud)

同样,我不知道如何将JSON字符串转换为通用JavaScript对象.我想知道如何将JSON字符串转换为"Foo"对象.也就是说,我的对象现在应该有一个函数'test'和属性'a'和'b'.

更新 在做了一些研究后,我想到了......

Object.cast = function cast(rawObj, constructor)
{
    var obj = new constructor();
    for(var i in rawObj)
        obj[i] = rawObj[i];
    return obj; …
Run Code Online (Sandbox Code Playgroud)

javascript parsing json prototype object

163
推荐指数
6
解决办法
15万
查看次数

JavaScript中的对象/数组的性能如何?(专门针对Google V8)

与JavaScript中的数组和对象(尤其是Google V8)相关的性能对于文档来说非常有趣.我在互联网上找不到关于这个主题的综合文章.

我知道一些对象使用类作为它的底层数据结构.如果有很多属性,它有时被视为哈希表?

我也理解,数组有时被视为C++数组(即快速随机索引,慢速删除和调整大小).而且,其他时候,它们更像对象(快速索引,快速插入/删除,更多内存).并且,有时它们可​​能存储为链接列表(即慢速随机索引,在开头/结尾快速删除/插入)

JavaScript中的数组/对象检索和操作的精确性能是什么?(专门针对Google V8)

更具体地说,它对性能的影响如下:

  • 向Object添加属性
  • 从Object中删除属性
  • 索引对象中的属性
  • 将项添加到数组
  • 从数组中删除项目
  • 索引数组中的项目
  • 调用Array.pop()
  • 调用Array.push()
  • 调用Array.shift()
  • 调用Array.unshift()
  • 调用Array.slice()

任何文章或链接的更多细节也将不胜感激.:)

编辑:我真的很想知道JavaScript数组和对象是如何工作的.此外,在什么情况下 V8引擎"知道""转换"到另一个数据结构?

例如,假设我用...创建一个数组

var arr = [];
arr[10000000] = 20;
arr.push(21);
Run Code Online (Sandbox Code Playgroud)

这里到底发生了什么?

或者......这个怎么样...... ???

var arr = [];
//Add lots of items
for(var i = 0; i < 1000000; i++)
    arr[i] = Math.random();
//Now I use it like a queue...
for(var i = 0; i < arr.length; i++)
{
    var item = arr[i].shift();
    //Do something with item...
} …
Run Code Online (Sandbox Code Playgroud)

javascript arrays performance v8 object

104
推荐指数
2
解决办法
4万
查看次数

Node.js中path.normalize和path.resolve之间的区别

是什么区别(如果有的话)path.normalize(your_path)path.resolve(your_path)

我知道path.resolve(...)可以接受多个参数,但是单个参数的行为与调用相同path.normalize()吗?

编辑:如果他们应该以相同的方式行事,我不明白path.normalize(...)当你可以简单地将路径传递给path.resolve(...)Or 时暴露函数的目的,也许,它是出于文档目的.例如,他们在文档中说path.resolve(...):

...生成的路径被标准化,并且......

暴露path.normalize(...)使得更容易解释什么"规范化"意味着??? 我不知道.

path node.js

84
推荐指数
1
解决办法
5万
查看次数

监控所有JavaScript对象属性(魔术getter和setter)

如何在JavaScript中模拟PHP风格的__get()和__set()魔术getter/setter?很多人都说现在这是不可能的.我几乎可以肯定这是可能的,因为像nowjs(http://nowjs.com)这样的项目会做这样的事情.

我知道您可以使用getset,但是当您不确定属性名称是什么时,这些不起作用.例如,如果您希望在创建新属性时执行事件处理程序,该怎么办?

我想做的例子:

var obj = {};
notify(obj, function(key, value) {
   //key is now the name of the property being set.
   //value is the value of the property about to be set
   console.log("setting " + key + " to " + value);
});
obj.foo = 2; //prints "setting foo to 2"
obj.bar = {a: 2}; //prints "setting bar to [Object]"
//Notice that notify() worked even though 'foo' and 'bar' weren't even defined …
Run Code Online (Sandbox Code Playgroud)

javascript getter setter node.js

27
推荐指数
1
解决办法
1万
查看次数

有效地计算JavaScript中对象的键/属性数

这个问题几乎与如何有效地计算JavaScript中对象的键/属性数量相同.

我想知道一条额外的信息:什么是确定对象中键数量的" 恒定时间 "方式?我主要关心的是在Node.JS中这样做,因为浏览器上的大多数对象都不是太大而不是很受关注.

编辑: 似乎Object.keys(obj).length在谷歌浏览器和Node.JS中以线性时间O(n)返回(即取决于键的数量obj).有更好的O(1)方法吗?

我在Node.JS做了一些测试(源代码如下)

var tests = [10e3, 10e4, 10e5, 10e6]
for(j in tests) {
    var obj = {};
    for(i = 0; i < tests[j]; i++)
        obj[i] = i;
    console.time('test' + tests[j]);
    Object.keys(obj).length;
    console.timeEnd('test' + tests[j]);
}
Run Code Online (Sandbox Code Playgroud)

对于n = 10e3,10e4,10e5,10e6 ...结果是:

test10000: 5ms
test100000: 20ms
test1000000: 371ms
test10000000: 4009ms
Run Code Online (Sandbox Code Playgroud)

javascript performance key object node.js

21
推荐指数
2
解决办法
5744
查看次数

从Node.JS中的未捕获异常中恢复

好的,所以我有一个问题.如果在处理HTTP请求时发生未捕获的异常,我就没有机会在http.ServerResponse对象上调用end()方法.因此,服务器永远挂起,永远不会满足请求.

这是一个例子:

var express = require('express');
var app = express.createServer();
var reqNum = 0;
app.get('/favicon.ico', function(req, res) {res.send(404);});
app.get('*', function(req, res, next) {
    console.log("Request #", ++reqNum, ":", req.url);
    next();
});
app.get('/error', function(req, res, next) {
    throw new Error("Problem occurred");
});
app.get('/hang', function(req, res, next) {
    console.log("In /hang route");
    setTimeout(function() {
        console.log("In /hang callback");
        if(reqNum >= 3)
            throw new Error("Problem occurred");
        res.send("It worked!");
    }, 2000);
});
process.on('uncaughtException', function(err) {
    console.log("Uncaught exception!", err);
});
app.listen(8080);
Run Code Online (Sandbox Code Playgroud)

如果您访问/错误,则会发生异常,但会被捕获.用户收到错误消息 - 没问题.但是,如果我访问/挂起,服务器最终将抛出未捕获的异常并永久挂起.任何后续的/ hang请求都将挂起.

这很糟糕.有关如何解决此问题的任何建议?

exception node.js uncaught-exception express

19
推荐指数
1
解决办法
9798
查看次数

没有协议的链接是否有效XHTML?即<a href="//www.example.com/">

拥有以下表单的链接是有效的XHTML /良好做法吗?//www.example.com/foo/bar.html

如果当前页面是HTTP,则链接指向:http://www.example.com/foo/bar.html 如果当前页面在HTTPS下受到保护,则链接指向:https://www.example的.com /富/一个bar.html

换句话说,是

<a href="//www.example.com/">

在XHTML 1.1中有效 严格?并且,它是否受到许多/所有浏览器的支持?

anchor https xhtml http href

7
推荐指数
1
解决办法
1864
查看次数

如何在PHP中使用Imagick包装文本,以便将其绘制为多行文本?

PHP中的Imagick库允许您在图像上绘制文本.如何告诉Imagick根据一些有界文本框包装文本?

即,使单词显示为多行文本而不是单行.

php text annotate imagick

7
推荐指数
3
解决办法
1万
查看次数

如何告诉MySQL Optimizer在派生表上使用索引?

假设您有这样的查询......

SELECT T.TaskID, T.TaskName, TAU.AssignedUsers
FROM `tasks` T
    LEFT OUTER JOIN (
        SELECT TaskID, GROUP_CONCAT(U.FirstName, ' ',
            U.LastName SEPARATOR ', ') AS AssignedUsers
        FROM `tasks_assigned_users` TAU
            INNER JOIN `users` U ON (TAU.UserID=U.UserID)
        GROUP BY TaskID
    ) TAU ON (T.TaskID=TAU.TaskID)
Run Code Online (Sandbox Code Playgroud)

可以将多个人分配给给定任务.此查询的目的是为每个任务显示一行,但将人员分配给单个列中的任务

现在...假设你有正确的指标设置上tasks,userstasks_assigned_users.在连接tasks到派生表时,MySQL Optimizer仍然不会使用TaskID索引.WTF?!?!?

所以,我的问题是......如何使这个查询使用tasks_assigned_users.TaskID上的索引?临时表是蹩脚的,所以如果这是唯一的解决方案...... MySQL优化器是愚蠢的.

使用的索引:

  • 任务
    • PRIMARY - TaskID
  • 用户
    • 主要 - 用户ID
  • tasks_assigned_users
    • PRIMARY - (TaskID,UserID)
    • 附加索引UNIQUE - (UserID,TaskID)

编辑:此外,此页面表示派生表在连接发生之前执行/实现.为什么不重新使用密钥来执行连接?

编辑2: MySQL优化器不会让你在派生表上放置索引提示(大概是因为派生表上没有索引)

编辑3:这是一篇非常好的博客文章:http: …

mysql sql optimization join derived-table

6
推荐指数
1
解决办法
8126
查看次数

metor blade模板在for循环中抛出"同一分支中的第二个地标"异常

我有一个for循环,我想在其中包含一个模板视图:

table.blade:

#game
    h1= table.name 
        -if( table.playerSitting() )
            a.btn.btn-danger.stand(href="#") Stand
    #table
        -for (var i=0; i<7;i++)
            include 'seat' exposing i
Run Code Online (Sandbox Code Playgroud)

seat.blade:

- id = 'p' + (i+1)
    div(id="#{id}")
        -if (table.hasAt(i))
            p= table.usernameAt(i)
        -else
            -if( !table.playerSitting() )
                a.btn.btn-inverse.sit(href="#", data-key="#{i}") Sit
            -else
                p &nbsp;
Run Code Online (Sandbox Code Playgroud)

当我第一次加载视图时,一切都很好.但如果我坐下或站着,或去另一张桌子,我会得到这个:

Exception from Deps recompute: Error: Can't create second landmark in same branch
    at /home/thomporter/meteor/blackjack/views/table.blade:8:4

 6 |        #table
 7 |            -for (var i=0; i<7;i++)
 8 >                include 'seat' exposing i
 9 |    
10 |    
Run Code Online (Sandbox Code Playgroud)

我想我可以通过创建一个存储用户ID和表ID的"席位"集合来解决这个问题,但这看起来很愚蠢.我目前正在使用名为"players"的表的数组属性,每个座位的索引为0-6 ......至少,这就是主意.=)

我还应该提到我用以下内容替换了seat.blade:

p hi …
Run Code Online (Sandbox Code Playgroud)

meteor blade node-blade meteorite

5
推荐指数
1
解决办法
492
查看次数

慢自我加入删除查询

它比这个查询更简单吗?

delete a.* from matches a
    inner join matches b ON (a.uid = b.matcheduid)
Run Code Online (Sandbox Code Playgroud)

是的,显然它确实...因为当matches表非常大时,上述查询的性能非常糟糕.

matches约有2.2亿条记录.我希望这个DELETE查询的大小减少到大约15,000条记录.如何提高查询性能?我在两列都有索引.UID和MatchedUID是此InnoDB表中仅有的两列,两者都是INT(10)无符号类型.该查询已在我的笔记本电脑(i7处理器)上运行超过14个小时.

sql performance join self-join sql-delete

1
推荐指数
1
解决办法
2817
查看次数