Javascript中对象的默认值

时间:2012-05-01 08:59:43

标签: javascript node.js object

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)。

6 个答案:

答案 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),所以为了使用++运算符,需要给出变量通过转让的类型。

希望有所帮助