我运行以下代码:
(function () {
console.log(this,this.hasOwnProperty('window'))
})();
在chrome中,它输出window true。
在IE11中,它输出window false
为什么?
发布于 2018-10-23 03:38:50
IE完全搞乱了hasOwnProperty方法,因为它很难处理主机对象(主机对象没有hasOwnProperty方法)。
然而,我们可以做的是直接访问Object.prototype
,以保证任何hasOwnProperty调用都没有被篡改或覆盖。
var myObject= {
prop: 'MyName',
otherProp: null
};
if (Object.prototype.hasOwnProperty.call(toddObject, 'favouriteDrink')) { // true
// do something if it exists
}
这里的秘诀是使用.call()
来更改hasOwnProperty的上下文(就是IE),并确保我们从Object.prototype获得了我们想要的hasOwnProperty。
https://stackoverflow.com/questions/31560403
复制相似问题