我知道如何解析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中的数组和对象(尤其是Google V8)相关的性能对于文档来说非常有趣.我在互联网上找不到关于这个主题的综合文章.
我知道一些对象使用类作为它的底层数据结构.如果有很多属性,它有时被视为哈希表?
我也理解,数组有时被视为C++数组(即快速随机索引,慢速删除和调整大小).而且,其他时候,它们更像对象(快速索引,快速插入/删除,更多内存).并且,有时它们可能存储为链接列表(即慢速随机索引,在开头/结尾快速删除/插入)
JavaScript中的数组/对象检索和操作的精确性能是什么?(专门针对Google V8)
更具体地说,它对性能的影响如下:
任何文章或链接的更多细节也将不胜感激.:)
编辑:我真的很想知道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) 是什么区别(如果有的话)path.normalize(your_path)
和path.resolve(your_path)
?
我知道path.resolve(...)
可以接受多个参数,但是单个参数的行为与调用相同path.normalize()
吗?
编辑:如果他们应该以相同的方式行事,我不明白path.normalize(...)
当你可以简单地将路径传递给path.resolve(...)
Or 时暴露函数的目的,也许,它是出于文档目的.例如,他们在文档中说path.resolve(...)
:
...生成的路径被标准化,并且......
暴露path.normalize(...)
使得更容易解释什么"规范化"意味着??? 我不知道.
如何在JavaScript中模拟PHP风格的__get()和__set()魔术getter/setter?很多人都说现在这是不可能的.我几乎可以肯定这是可能的,因为像nowjs(http://nowjs.com)这样的项目会做这样的事情.
我知道您可以使用get和set,但是当您不确定属性名称是什么时,这些不起作用.例如,如果您希望在创建新属性时执行事件处理程序,该怎么办?
我想做的例子:
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中对象的键/属性数量相同?.
我想知道一条额外的信息:什么是确定对象中键数量的" 恒定时间 "方式?我主要关心的是在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) 好的,所以我有一个问题.如果在处理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请求都将挂起.
这很糟糕.有关如何解决此问题的任何建议?
拥有以下表单的链接是有效的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中有效 严格?并且,它是否受到许多/所有浏览器的支持?
PHP中的Imagick库允许您在图像上绘制文本.如何告诉Imagick根据一些有界文本框包装文本?
即,使单词显示为多行文本而不是单行.
假设您有这样的查询......
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
,users
和tasks_assigned_users
.在连接tasks
到派生表时,MySQL Optimizer仍然不会使用TaskID索引.WTF?!?!?
所以,我的问题是......如何使这个查询使用tasks_assigned_users.TaskID上的索引?临时表是蹩脚的,所以如果这是唯一的解决方案...... MySQL优化器是愚蠢的.
使用的索引:
编辑:此外,此页面表示派生表在连接发生之前执行/实现.为什么不重新使用密钥来执行连接?
编辑2: MySQL优化器不会让你在派生表上放置索引提示(大概是因为派生表上没有索引)
编辑3:这是一篇非常好的博客文章:http: …
我有一个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
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) 它比这个查询更简单吗?
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个小时.
javascript ×4
node.js ×4
object ×3
performance ×3
join ×2
sql ×2
anchor ×1
annotate ×1
arrays ×1
blade ×1
exception ×1
express ×1
getter ×1
href ×1
http ×1
https ×1
imagick ×1
json ×1
key ×1
meteor ×1
meteorite ×1
mysql ×1
node-blade ×1
optimization ×1
parsing ×1
path ×1
php ×1
prototype ×1
self-join ×1
setter ×1
sql-delete ×1
text ×1
v8 ×1
xhtml ×1