繁体   English   中英

为什么Object.keys()和...在不同的?

[英]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检查(它实际上不是对方法的调用,它是一个内部检查,不能通过替换方法或类似方法来欺骗)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM