![](/img/trans.png)
[英]Uncaught TypeError: Cannot read property 'hasOwnProperty' of undefined
[英]hasOwnProperty Uncaught TypeError
當試圖在已定義對象的上下文之外調用hasOwnProperty()
時,我試圖理解該錯誤消息。 即代替myObj.hasOwnProperty('propName')
,只是:
hasOwnProperty('propName')
錯誤消息是:
VM269:1 Uncaught TypeError: Cannot convert undefined or null to object
at hasOwnProperty (<anonymous>)
at <anonymous>:1:1
我期待的錯誤:
VM280:1 Uncaught ReferenceError: hasOwnProperty is not defined
at <anonymous>:1:1
轉換失敗到底是什么?
console.log(window.hasOwnProperty('blur')); hasOwnProperty('propName');
我認為人們會誤解我的問題。 我了解您通常會像myObj.hasOwnProperty('propName')
這樣調用它。 我想更好地了解它引發的錯誤。 究竟什么是它失敗的轉換? 如@Felix所述,它應隱式地退回到window.hasOwnProperty('propName')
有趣的是,我從developer.mozilla.org取了Polyfill,並將其重命名為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'));
發生此錯誤是因為方法期望Object
定義該property
屬於此Object
。
您應該使用如下語法:
Object.hawOwnProperty(property)
您也可能在函數需要Object
卻得到null
地方遇到這種錯誤。
例如:
Object.keys(null)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.