此代码仅迭代对象的可枚举属性:
for (variable in object)
statement
以下代码迭代所有属性,而不仅仅是可枚举的属性:
function getAllPropertyNames(obj) {
var result = [];
while (obj) {
Array.prototype.push.apply(result, Object.getOwnPropertyNames(obj));
obj = Object.getPrototypeOf(obj);
}
return result;
}
循环while (obj)
何时中断?
while
块中的行如何将obj
的属性名称添加到result
?
答案 0 :(得分:0)
- 循环
醇>while (obj)
何时中断?
当原型链getPrototypeOf
中没有更多原型时,返回null
。对于常规对象,当您尝试获取Object.prototype
的原型时会发生这种情况。
- 醇>
while
块中的行如何将obj
的属性名称添加到result
?
Array.prototype.push.apply(result, array)
将array
中的每个元素作为参数传递给result.push
。这就像调用result.push(a[0], a[1], ...)
,其中a
是Object.getOwnPropertyNames(obj)
。