1

在 node.js 中枚举 Object.keys() 存在我不理解的问题。使用以下代码:

Object.prototype.tuple = function() {
  var names = Object.keys(this);
  console.log("Dump of names:");
  console.log(names);
  console.log("FOR loop using indexes:");
  for (var k = 0; k < names.length; k++)
  {
    console.log(names[k]);
  }
  console.log("FOR loop using enumeration:");
  for (var z in names)
  {
    console.log(z);
  }
  return this;
};

var x = {a:0, b:0, c:0}.tuple();

我在控制台上得到以下结果:

Dump of names:
[ 'a', 'b', 'c' ]
FOR loop using indexes:
a
b
c
FOR loop using enumeration:
0
1
2
tuple

有人可以解释第二个循环中额外的“元组”来自哪里吗?虽然在 Object.prototype 中定义为函数,但它既不是x对象自己的属性,也不包含在names数组中。

我正在使用 node.js 版本 0.8.20。

4

2 回答 2

1

第一个循环遍历x(Object.keys()只返回自己的属性) 的属性,而第二个循环遍历 properties 或array names,包括原型链中的那些。

感谢Jonathan Lonowski的澄清。

于 2013-07-05T08:24:45.437 回答
0

我认为上面提到的@Kuba 是不正确的,但我不能拒绝他的回答。

Object.keysObject.getOwnPropertyNames而其他类似的方法在外观上会有所不同。他们的行为与名为 的属性有关enumerable

我要和我的朋友共进晚餐,所以我只能给你一个有用的链接来说明它。非常抱歉。

https://developer.mozilla.org/en-US/docs/Enumerability_and_ownership_of_properties

于 2013-07-05T08:48:36.650 回答