枚举node.js中的Object.keys() - 奇怪的问题

时间:2013-07-05 08:09:33

标签: node.js

在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。

2 个答案:

答案 0 :(得分:1)

第一个循环遍历x的属性(Object.keys()仅返回自己的属性),而第二个循环遍历属性或数组 {{1} },包括原型链中的那些。

感谢 Jonathan Lonowski 澄清。

答案 1 :(得分:0)

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

Object.keysObject.getOwnPropertyNames和其他类似的方法会表现得不同。他们的行为与名为enumerable的属性相关。

我要和朋友一起吃饭,所以我只能给你一个有用的链接来说明它。很抱歉。

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