有没有办法增加普通JS对象的已定义和未定义属性而没有性能"惩罚"?
var foo = {
counter: 0
};
for (var i=10000; i >= 0; i--) {
foo['counter']++;
foo['anyOtherCounter']++; // This should work as 'counter' but without errors
}
使用conditionals(if语句或三元运算符)来检查属性是否已定义被视为性能损失。
欢迎使用Bleeding edge ES功能。
答案 0 :(得分:0)
如果您之前没有设置该属性,则不会在循环中绕过条件(某种类型)。
我已经在http://jsperf.com/incrementing-properties设置了一个测试用例,如果您不将undefined
强制转换为数字,那么实际上并没有那么多的惩罚。< / p>
欢迎使用Bleeding edge ES功能
我不这么认为,他们很可能没有优化那么多。但是,对于不存在的属性,Proxies产生0
而不是undefined
可能是个主意。