[英]Javascript confusing syntax inconsistence for null, instanceof and typeof?
var obj = {};
typeof obj; // returns "object"
obj instanceof Object // return true
typeof null // returns "object"
null instanceof Object // returns false
那怎么樣?
typeof undefined // return "undefined"
undefined instanceof undefined
// ERROR: Uncaught TypeError: Expecting a function in instanceof check,
// but got undefined
為什么會這樣? 我已經閱讀了很多關於SO的相關主題,但仍然無法得到這個。
理解'typeof'會返回一個String,所以它幾乎反映了Javascript中的規則。(例如,null是一個對象......好吧..)但是為什么“null instanceof Object”返回false?
“x instanceof y”
這是否意味着'x'必須由'y'構造函數創建? 對於null,情況並非如此?
編輯
如果您能夠解釋其背后的不同意圖和其他語法和返回值的類型,那將非常感激。
null和undefined之間的區別
typeof null // object (bug in ECMAScript, should be null)
typeof undefined // undefined
null === undefined // false
null == undefined // true
REF
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/instanceof https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof
這只是設計決策,可能是人為的或奇怪的。 按照typeof
UnaryExpression如果評價為以下。 我剛才包括重要的點。
Table 20:
╔═════════════╦══════════╗
║ Type of val ║ Result ║
╠═════════════╬══════════╣
║ null ║ "object" ║
╚═════════════╩══════════╝
所以,我們無能為力。 這是設計狀態 。 但返回false
是正確的,因為null
有一個單獨的類型,稱為Null type
Null type:
唯一值為空值的類型
null
顯然不是Object的實例,因為它有自己的類型。 只是typeof
運算符返回"object"
。 這與javascript的設計有關。
為什么會這樣? 將不得不問Brendan Eich(Javascript的創始人)。
這是ECMAScript的常見錯誤。
null
不是一個object
,它是一個原始值。(所以你不能修改它就像添加屬性一樣)
typeof null
應該返回null
typeof null // object(ECMAScript中的bug,應為null)
typeof undefined // undefined
null === undefined // false
null == undefined // true
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/null
EDITED
雖然看不到它
由brendan在3周前更改
你知道,這一切都是因為1995年5月初的匆忙而導致的,這導致了null和對象類型共享的類型標記表示的泄漏。 但是null意味着“沒有對象”,所以它沒有引起騷動,直到在Netscape 2中修復為時已晚,之后我們不願意“修復”它並“破壞網絡”。 這個論點現在只適用於網絡人口的程度。 我們還有其他魚類可以炒。 這個已經被吞噬了。 讓我們不要為ES4更改typeof null並處理更重要的問題。
http://web.archive.org/web/20071110193102/http://bugs.ecmascript.org/ticket/250
還檢查這個答案
instanceof
更吸引人,但你檢查instaceof undefined
拋出異常,因為undefined不是任何單一類型的對象名,它可能是也可能不是JavaScript Object
sub method
。 因為undefined
類型為null
(Null Type)。
typeof undefined // return "undefined"
undefined instanceof Object // return False
你應該檢查undefined是instaceof
JS對象,給它一個不是它不是對象。 它給出了一個boolean
結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.