簡體   English   中英

hasOwnProperty未捕獲TypeError

[英]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')


編輯2:

有趣的是,我從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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM