为什么无法使用"for..in"向空的JavaScript对象添加新的"键 - 值"对,但它是否适用于非空对象?

Ami*_*ode 1 javascript for-loop object

为什么不能用"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));
Run Code Online (Sandbox Code Playgroud)

我明白了:

{}
Run Code Online (Sandbox Code Playgroud)

如果我写:

function test(obj) {

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

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

console.log(test(g));
Run Code Online (Sandbox Code Playgroud)

我明白了:

{ r: 'i', w: 'o', a: 'b' }
Run Code Online (Sandbox Code Playgroud)

为什么?

Nin*_*olz 5

因为在第一种情况下永远不会输入循环.

for ... in

for...in语句以任意顺序迭代对象的可枚举属性.对于每个不同的属性,可以执行语句.

没有属性的地方没有迭代.