在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。
答案 0 :(得分:1)
第一个循环遍历x
的属性(Object.keys()
仅返回自己的属性),而第二个循环遍历属性或数组 {{1} },包括原型链中的那些。
感谢 Jonathan Lonowski 澄清。
答案 1 :(得分:0)
我认为上面提到的@Kuba不正确,但我不能拒绝他的回答。
Object.keys
,Object.getOwnPropertyNames
和其他类似的方法会表现得不同。他们的行为与名为enumerable
的属性相关。
我要和朋友一起吃饭,所以我只能给你一个有用的链接来说明它。很抱歉。
https://developer.mozilla.org/en-US/docs/Enumerability_and_ownership_of_properties