为什么不能添加新的';键值';与带“0”的空JavaScript对象配对;对于“中的..”;,但它对一个非空对象有效?
为什么不能向带有“for..in”的空Javscript对象添加新的“key-value”对,但它可以与非空对象一起工作 如果我写:为什么不能添加新的';键值';与带“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
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'两次。你认为你会得到什么来代替这个对象?我想我没有理解你的意思,输出是直接的。如果你迭代一个空对象,循环在任何时候都不会迭代。这就是为什么你的第一个对象仍然是空的