为什么 Object.keys() 和 for ..在不同的
Why are Object.keys() and for ... in different?
我正在尝试做一些浏览器对象发现,找出浏览器内置等...
在尝试获取窗口对象的属性时,我注意到了不同的结果(仅供参考,我使用的是 Chrome 版本 41.0.2272.89(64 位))。
Object.keys(window).length;
返回 7 个密钥。从文档中 Object.keys() 返回对象的可枚举属性。
但文档还说,for ... in
迭代对象的可枚举属性。然而:
var i = 0;
for (var propertyName in window) {
i++;
}
返回计数 177。
为什么会有所不同?它们不应该只返回可枚举属性的计数吗?
for-in
循环对象自己的可枚举属性及其原型(及其原型等)的可枚举属性。 Object.keys
仅列出对象自己的可枚举属性。
所以Object.keys
构建一个这样的数组:
var keys = [];
var key;
for (key in object) {
if (object.hasOwnProperty(key)) { // But using an internal, non-overrideable
// operation, not literally the method
keys.push(key);
}
}
请注意hasOwnProperty
检查(它不是对方法的真正调用,而是无法通过替换方法或类似方法来欺骗的内部检查)。
相关文章:
- 为什么JavaScript在for循环为3时向所有4发出警报
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- Is onfling available for html, html5
- 为什么 Object.keys() 和 for ..在不同的
- 附加字符串时,for循环中出现Javascript[Object-Object]错误
- Mock window.document object for out-of-browser jQuery
- Dojo Equivalent for Object.keys
- Object 在 ie8 for javascript 中不支持此属性或方法
- Javascript setter for value of object
- Knockout maping.fromJS for observableArray from json object.
- 如何将烦人的“for”循环转换为“Object.keys”例程或类似例程(JSLint)
- 如果我在for语句中使用object.getElementsByTagName(tagName)
- Code Assist for Javascript Canvas object
- for在循环中返回[object object]
- 为什么不't Object.keys(window)或for(window中的k)返回Math
- 如何使用javascript For In或Object从json数组中订购帖子.键循环
- for-in vs Object.没有继承属性的keys forEach
- Object|Array.observe() implementation for ECMA 5
- 雄辩的Javascript, listToArray.为什么我的for循环返回rest [object]当输入数组有超过
- 在AngularJS中重复for object (hash)