Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript中对象的默认值_Javascript_Node.js_Object - Fatal编程技术网

Javascript中对象的默认值

Javascript中对象的默认值,javascript,node.js,object,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;

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;
}
vari;

对于(i=0;i在第一个代码中,您不能。任何添加到非数字或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
}

for(i=0;i在第一个代码中,您不能。任何添加到非数字或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
}

for(i=0;iJavascript默认情况下将所有新变量定义为未定义(如果未显式定义),这与您尝试定义的Number对象不同。因此,您应该使用smth,如:

for (i=0; i<10; i++) {
    a.test = a.test || 0;
    ++a.test
}

for(i=0;iJavascript默认情况下将所有新变量定义为未定义(如果未显式定义),这与您尝试定义的Number对象不同。因此,您应该使用smth,如:

for (i=0; i<10; i++) {
    a.test = a.test || 0;
    ++a.test
}

for(i=0;i对于任何未定义的任意属性,都无法执行此操作

对于已知的属性名,有一种方法,但不要使用它!!1

这将为每个对象提供一个隐式的
。test
属性,其中包含该值,第一次尝试修改时,结果将存储在您自己的对象中:

> Object.prototype.test = 0
> a = {}
> a.test++
> a.test
1


1向
对象添加内容。prototype
将破坏内容,包括
for(key in obj)
对于任何任意未定义的属性,都无法执行此操作

对于已知的属性名,有一种方法,但不要使用它!!1

这将为每个对象提供一个隐式的
。test
属性,其中包含该值,第一次尝试修改时,结果将存储在您自己的对象中:

> Object.prototype.test = 0
> a = {}
> a.test++
> a.test
1


1向
对象添加内容。prototype
将破坏内容,包括使用标准JS的
(键入obj)
不可能按您的要求执行。除非我猜您是prototype?但我对prototype没有经验。而且我认为prototype不能与Node.JS一起工作

这是因为js不是类型化语言(即,我们只使用var来声明变量,而不是int a或string b),因此为了使用++运算符,需要通过赋值为变量指定类型


希望这对使用标准JS有所帮助。不可能按您的要求执行。除非您使用原型,否则我猜?但我对原型没有经验。而且我认为原型与Node.JS不兼容

这是因为js不是类型化语言(即,我们只使用var来声明变量,而不是int a或string b),因此为了使用++运算符,需要通过赋值为变量指定类型


希望这有帮助

这就是原型在javascript中有用的地方:

function Demo() {
}
Demo.prototype.x = 0;


这就是原型在javascript中有用的地方:

function Demo() {
}
Demo.prototype.x = 0;

我认为这样做可以:

var a = {"test":0};
a.test += 1; 
我认为这样做可以:

var a = {"test":0};
a.test += 1; 

任何原因,你不能简单地使用<代码> var a= {测试:0 };< /代码> .ouTIS属性是动态生成的。你甚至可以考虑var a= [];a(0)++;数组的大小不能在前面确定,如果<代码> Actest==false < /COD> >或<代码>“”,A.HasWORKY属性(“test”)将更安全。如果您试图确定该属性是否存在任何原因,则不能简单地使用<代码> var a= {测试:0 };< /代码> .ouTIS属性是动态生成的。您甚至可以考虑var a= [];a(0)++;如果代码< >测试==false 或<代码>,数组的大小在这里无法确定。
?执行.hasOwnProperty(“测试”)会更安全如果您试图确定属性是否存在,我只在我的代码中提到了您的答案。请参阅第三段代码中的注释。如果您希望始终定义默认的a.test,您应该使用prototype/class对象,正如我提到的,如果没有显式定义为数字、字符串等,那么它是未定义的仅在我的代码中回答。请参阅第3个代码段中的注释如果希望始终定义默认的a.test,则应使用prototype/class对象,正如我提到的,如果某些内容未明确定义为数字、字符串等。它是未定义的。Dop不希望显式声明/初始化testOP不希望显式声明/初始化test@m我想是的,就像我的回答一样,因为如果你不知道那个人的名字,就没办法这么做property@mihai是的,就像我的回答一样,因为如果你不知道房子的名字,你就没办法这么做