instanceof 與文字的不一致
JavaScript 的instanceof 運算符,儘管其目的是檢查物件是否是類別的實例,但表現出一些文字的意外行為。本文深入探討這些不一致之處,並揭示背後的原因。
原始文字與物件文字
原始文字,例如字串、數字和布林值,存在於與JavaScript 中建立的物件相比,這是一個獨特的類型類別。以下範例說明了這種差異:
<code class="js">var color1 = new String("green"); color1 instanceof String; // returns true var color2 = "coral"; color2 instanceof String; // returns false (color2 is not a String object)</code>
雖然 color1 是從建構子建立的 String 實例,但 color2 是原始字串文字。
False 使用instanceof 回傳
意外的是,instanceof 對許多文字回傳false:
<code class="js">"foo" instanceof String // false true instanceof Boolean // false 12.21 instanceof Number // false</code>
這些基元不被視為其各自包裝物件的實例。
異常數組和物件
陣列和物件文字是規則的例外:
<code class="js">[0,1] instanceof Array // true {0:1} instanceof Object // true</code>
它們被視為對應建構子的實例。
不一致的原因
不同的實例行為是故意的。 JavaScript 將基元視為不可變值而非物件。因此,它們不繼承任何類別。陣列和物件文字的例外是為了簡化物件操作並保持與建構函數的一致性。
結論
在 JavaScript 中創建的原始文字和物件的不同之處在於與instanceof操作符的行為。這種區別可能既違反直覺又方便,具體取決於具體的用例。透過理解這種微妙的行為,開發人員可以在 JavaScript 程式碼中有效地利用 instanceof。
以上是為什麼 JavaScript 中 `instanceof` 的行為與文字不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!