首頁 > web前端 > js教程 > 為什麼 JavaScript 中的原語的 `instanceof` 行為不同?

為什麼 JavaScript 中的原語的 `instanceof` 行為不同?

Patricia Arquette
發布: 2024-11-02 12:00:05
原創
390 人瀏覽過

Why Does `instanceof` Behave Differently for Primitives in JavaScript?

JavaScript 中的實例和基元:了解instanceof 異常

如果物件繼承自特定類,JavaScript 的instanceof 運算子將會傳回true。然而,某些文字(例如字串和數字)似乎違反了此規則,對於實例比較傳回 false。為什麼會這樣呢?

基元 vs. 物件

理解這些異常的關鍵在於基元和物件之間的差異。基元(包括字串、數字、null、未定義和布林值)不是使用建構函式建立的。相反,物件是使用建構函式或物件文字建立的,例如 new String("foo") 或 {}。

基元的instanceof 行為

對於基元, instanceof 運算子會對所有類別傳回 false。這是因為基元不是任何類別的實例,並且不繼承自任何原型。例如:

<code class="js">"foo" instanceof String // false
123 instanceof Number // false</code>
登入後複製

例外:RegExp 和數組

RegExp 文字儘管是原語,但是此規則的一個例外。對於 RegExp 實例,它們傳回 true。類似地,數組字面量對於 instanceof Array 傳回 true。

instanceof 與 Null 和 Undefined

Null 和 undefined 是獨特的原語,它們具有 instanceof 的特殊行為。它們對所有類別(包括 Object)傳回 false。這是因為它們在技術上不是對象,而是擁有自己獨特的資料類型。

後果

instanceof 行為中的不一致可能會令人困惑並導致意外的結果結果。為了避免此類問題,通常建議使用 typeof 檢查而不是 instanceof 來確定變數的類型。例如:

<code class="js">var foo = "string";
typeof foo === "string" // true</code>
登入後複製

以上是為什麼 JavaScript 中的原語的 `instanceof` 行為不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板