Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.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
为什么不能添加新的';键值';与带“0”的空JavaScript对象配对;对于“中的..”;,但它对一个非空对象有效?_Javascript_Object_For Loop - Fatal编程技术网

为什么不能添加新的';键值';与带“0”的空JavaScript对象配对;对于“中的..”;,但它对一个非空对象有效?

为什么不能添加新的';键值';与带“0”的空JavaScript对象配对;对于“中的..”;,但它对一个非空对象有效?,javascript,object,for-loop,Javascript,Object,For Loop,为什么不能向带有“for..in”的空Javscript对象添加新的“key-value”对,但它可以与非空对象一起工作 如果我写: function test(obj) { for (prop in obj) { prop = 'a'; obj[prop] = 'b'; } return obj; } var g = {}; console.log(test(g)); function test(obj) { for (prop in

为什么不能向带有“for..in”的空Javscript对象添加新的“key-value”对,但它可以与非空对象一起工作

如果我写:

function test(obj) {

    for (prop in obj) {
       prop = 'a';
       obj[prop] = 'b';
   }
return obj;
}

var g = {};

console.log(test(g));
function test(obj) {

   for (prop in obj) {
      prop = 'a';
      obj[prop] = 'b';
   }
 return obj;
}

var g = {r : 'i' , w : 'o'};

console.log(test(g));
我得到:

{}
{ r: 'i', w: 'o', a: 'b' }
如果我写:

function test(obj) {

    for (prop in obj) {
       prop = 'a';
       obj[prop] = 'b';
   }
return obj;
}

var g = {};

console.log(test(g));
function test(obj) {

   for (prop in obj) {
      prop = 'a';
      obj[prop] = 'b';
   }
 return obj;
}

var g = {r : 'i' , w : 'o'};

console.log(test(g));
我得到:

{}
{ r: 'i', w: 'o', a: 'b' }
为什么?

在这方面:

function test(obj) {

    for (prop in obj) {
       prop = 'a';
       obj[prop] = 'b';
   }
return obj;
}
当您传递空对象时,for…in不会运行,因为对象没有键,所以它返回空对象,如下所示:

function test(obj) {

    for (prop in obj) {
       prop = 'a';
       obj[prop] = 'b';
   }
return obj;
}

当您传递空对象时,for…in不会运行,因为对象没有键,所以它返回空对象

问题是您在
for
周期内执行了属性的添加。您设置的
g.a
的次数与
g
已设置的属性数相同


在第一个示例中,
g
没有属性,因此您永远不会执行添加操作。在第二个示例中,您设置了三次,最后只看到一个新属性,因为每次重复都会覆盖上一个属性,而不是添加新的属性。

问题在于您在
for
循环中执行了属性的添加。您设置的
g.a
的次数与
g
已设置的属性数相同


在第一个示例中,
g
没有属性,因此您永远不会执行添加操作。在第二个示例中,您设置了三次,最后只看到一个新属性,因为每次重复都会覆盖上一个属性,而不是添加新的属性。

因为在第一种情况下从未输入循环

for…in
语句以任意顺序在对象的。对于每个不同的属性,都可以执行语句


其中没有属性,就没有迭代。

因为在第一种情况下从未输入循环

for…in
语句以任意顺序在对象的。对于每个不同的属性,都可以执行语句


如果没有属性,就没有迭代。

类似地,考虑一下:为什么当我执行
for(I=0;一个空对象没有
for
循环要迭代的属性。如果您尝试执行
for(obj中的prop)
在没有键的空对象上,它根本不会运行。
中的“
for…”就像一个常规的for循环,它迭代值。为什么另一个有效?因为您的对象有两个键值对,所以它迭代它们,并实际设置obj['a']='b'两次。你认为你会得到什么来代替这个对象?我想我没有理解你的意思,输出是直接的,如果你迭代一个空的对象,循环将不会在任何时候迭代。这就是为什么你的第一个对象仍然是空的,考虑一下:为什么当我为(i=0;iAn空对象没有要迭代的
for
循环的属性。如果尝试执行
for(obj中的prop)
在没有键的空对象上,它根本不会运行。
中的“
for…”就像一个常规的for循环,它迭代值。为什么另一个有效?因为您的对象有两个键值对,所以它迭代它们,并实际设置obj['a']='b'两次。你认为你会得到什么来代替这个对象?我想我没有理解你的意思,输出是直接的。如果你迭代一个空对象,循环在任何时候都不会迭代。这就是为什么你的第一个对象仍然是空的