我正在尝试做一些浏览器对象发现,搞清楚浏览器内置等...
当我试图获取窗口对象的属性时,我注意到了不同的结果(仅供参考,我使用的是Chrome版本41.0.2272.89(64位)).
Object.keys(window).length;
Run Code Online (Sandbox Code Playgroud)
返回7个键.从文档Object.keys()返回对象的可枚举属性.
但是文档也说for ... in迭代了对象的可枚举属性.然而:
var i = 0;
for (var propertyName in window) {
i++;
}
Run Code Online (Sandbox Code Playgroud)
返回177的计数.
为什么会有所不同?他们不应该只返回可枚举属性的数量吗?
T.J*_*der 16
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);
}
}
Run Code Online (Sandbox Code Playgroud)
请注意hasOwnProperty检查.
| 归档时间: |
|
| 查看次数: |
2551 次 |
| 最近记录: |