是否有一种方法可以在没有性能"惩罚"的情况下增加一个普通JS对象的定义和未定义属性?
var foo = {
counter: 0
};
for (var i=10000; i >= 0; i--) {
foo['counter']++;
foo['anyOtherCounter']++; // This should work as 'counter' but without errors
}
使用条件(if语句或三元运算符)检查是否定义了属性将被认为是性能损失。
如果之前没有设置属性,就无法绕过循环中的条件(某种类型)。
我已经在http://jsperf.com/incrementing-properties上设置了一个测试用例,如果您不将undefined
强制转换为数字,实际上并没有那么多的惩罚。
前沿的ES特性是受欢迎的
我不这么认为,它们很可能没有那么优化。对于不存在的属性,生成0
而不是undefined
的代理可能是一个想法。