当hasOwnProperty()在定义对象的上下文之外被调用时,我试图理解它的错误消息。即,与myObj.hasOwnProperty('propName')不同,只需:
hasOwnProperty('propName')错误信息是:
VM269:1 Uncaught TypeError: Cannot convert undefined or null to objectat hasOwnProperty (<anonymous>)at <anonymous>:1:1
我所期待的错误:
VM280:1 Uncaught ReferenceError: hasOwnProperty is not definedat <anonymous>:1:1
到底什么东西没能转化?
console.log(window.hasOwnProperty('blur'));
hasOwnProperty('propName');
编辑:
我想人们误解了我的问题。据我所知,您通常会像调用myObj.hasOwnProperty('propName')一样调用它。我想更好地理解它所抛出的错误。,到底是什么未能转换?正如@Felix所指出的,它应该隐式地回到window.hasOwnProperty('propName')
编辑2:
有趣的是,我从developer.mozilla.org获得了将其重命名为new_hasOwnProperty的多边形填充,它的工作原理与预期的一样:
try{
hasOwnProperty('blur');
}
catch(error) { console.log(error.message); }
// Polyfill
(function(w) {
var isFunction = w.isFunction || (w.isFunction = function(x) {
return typeof(x) === 'function'
}),
has = w.has || (w.has = function(o, p) {
var e = p in o;
return {
value: e && (e = o[p]) && true,
refer: e,
valueOf: function() {
return this.value
}
}
}),
Polyfill = w.PolyfillMethod || (w.PolyfillMethod = function(o, p, x) {
var e = has(o, p);
if (e && (e = isFunction(e.refer)) === false) {
o[p] = x
};
return e
}),
theProto = w.Object.prototype;
Polyfill(theProto, 'new_hasOwnProperty', function(x) {
var o, e = this,
p = String(x);
return p in e && (o = e.__proto__ || e.constructor.prototype, (p in o === false) || e[p] !== o[p])
});
})(window);
console.log(new_hasOwnProperty('blur'));
发布于 2018-11-14 11:26:28
此错误发生,原因方法期望Object定义该property是否属于此Object。
您应该使用如下语法:
Object.hawOwnProperty(property)
此外,在函数需要Object但获取null的地方,您可能会遇到这样的错误。
例如:
Object.keys(null)
https://stackoverflow.com/questions/53298915
复制相似问题