我刚刚在Firefox Developer Edition 49.0a2(2016-06-17)中执行了以下代码块
let array1 = Object.keys(window);
let array2 = [];
for (let key in window) {
array2.push(key);
};
/* filter for keys missing in Object.keys(window) */
array2.filter(function (e) {
return !array1.includes(e);
}).toString();
//result:
//"addEventListener,dispatchEvent,removeEventListener"
这种差异的原因是这些不是window
的属性,因为可以使用window.hasOwnProperty(...)
进行检查。我不明白的是:从那时起他们在哪里,因为我可以通过window.addEventListener
等访问它们。为什么eval
和keys
之类的内容不在该列表中?
顺便说一句:keys
和Object.keys
之间有什么区别?因为
Object.keys(window).toString() === keys(window).toString() //true