Javascript代码
var a = {};
a.test += 1; //NaN
++a.test; //NaN
相反
var a = {};
a.test = 0;
++a.test; //1
a.test += 1; //2
我想知道是否可以使第一个代码示例与第二个相同,即没有显式赋值为0.如将对象的任何属性的默认值赋值为0而不是undefined
。我想在node.js中这样做。所以,没有跨浏览器的东西和旧的ECMA规范的问题。
var i;
for(i = 0; i<10; i++) {
if(a.test) {
++a.test;
} else {
a.test = 0;
++a.test;
}
//a.test = a.test || 0; (1)
//++a.test;
}
如果可能,则可以消除上述代码中的内部if / else或赋值语句(1)。
答案 0 :(得分:4)
默认情况下,Javascript将所有新变量定义为未定义(如果未明确定义),这与您尝试定义的Number对象不同。所以你应该使用smth:
for (i=0; i<10; i++) {
a.test = a.test || 0;
++a.test
}
答案 1 :(得分:3)
任何未定义的任何属性都无法做到这一点。
对于已知的属性名称,是的一种方式,但不要使用它!! 1
Object.prototype.test = 0;
这将为每个对象提供一个带有该值的隐式.test
属性,并且当您第一次尝试修改它时,结果将存储在您自己的对象中:
> Object.prototype.test = 0
> a = {}
> a.test++
> a.test
1
1 向Object.prototype
添加内容会破坏内容,包括for (key in obj)
答案 2 :(得分:1)
这是原型在javascript中有用的地方:
function Demo() {
}
Demo.prototype.x = 0;
> a = new Demo();
> a.x += 1
> a.x
1
> b = new Demo()
> b.x
0
答案 3 :(得分:0)
在第一个代码中,你不能。添加到非数字或NaN值的任何数字将始终生成NaN
var a = {};
a.test += 1; // undefined + 1 = NaN
++a.test; // ++(undefined) = NaN
内部if
for(i = 0; i<10; i++) {
a.test = a.test || 0; //use existing value, or if undefined, 0
++a.test; //increment
}
答案 4 :(得分:0)
我认为这样做:
var a = {"test":0};
a.test += 1;
答案 5 :(得分:-1)
使用标准JS,你不可能做你所要求的。除非你原型我猜?但我对Prototype没有经验。我认为原型设计不适用于Node.js
原因是因为js不是类型化的语言(即我们只使用var来声明变量,而不是int a或string b),所以为了使用++运算符,需要给出变量通过转让的类型。
希望有所帮助