如果物件繼承自特定類,JavaScript 的instanceof 運算子將會傳回true。然而,某些文字(例如字串和數字)似乎違反了此規則,對於實例比較傳回 false。為什麼會這樣呢?
理解這些異常的關鍵在於基元和物件之間的差異。基元(包括字串、數字、null、未定義和布林值)不是使用建構函式建立的。相反,物件是使用建構函式或物件文字建立的,例如 new String("foo") 或 {}。
對於基元, instanceof 運算子會對所有類別傳回 false。這是因為基元不是任何類別的實例,並且不繼承自任何原型。例如:
<code class="js">"foo" instanceof String // false 123 instanceof Number // false</code>
RegExp 文字儘管是原語,但是此規則的一個例外。對於 RegExp 實例,它們傳回 true。類似地,數組字面量對於 instanceof Array 傳回 true。
Null 和 undefined 是獨特的原語,它們具有 instanceof 的特殊行為。它們對所有類別(包括 Object)傳回 false。這是因為它們在技術上不是對象,而是擁有自己獨特的資料類型。
instanceof 行為中的不一致可能會令人困惑並導致意外的結果結果。為了避免此類問題,通常建議使用 typeof 檢查而不是 instanceof 來確定變數的類型。例如:
<code class="js">var foo = "string"; typeof foo === "string" // true</code>
以上是為什麼 JavaScript 中的原語的 `instanceof` 行為不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!