簡體   English   中英

Javascript混淆null,instanceof和typeof的語法不一致?

[英]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如果評價為以下。 我剛才包括重要的點。

ECMA規范:根據表20返回由Type(val)確定的字符串。

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

還檢查這個答案

為什么null是一個對象,null和undefined之間有什么區別?

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.

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