Instanceof 難題:為什麼有些文字無法匹配
儘管是JavaScript 的基礎,但實例化運算符在與某些特定物件一起使用時可能會表現出令人費解的行為文字。值得注意的是,字串、布林值和數字文字在針對各自的建構子進行測試時都計算為 false。
<code class="js">"foo" instanceof String //=> false "foo" instanceof Object //=> false true instanceof Boolean //=> false true instanceof Object //=> false false instanceof Boolean //=> false false instanceof Object //=> false 12.21 instanceof Number //=> false /foo/ instanceof RegExp //=> true</code>
這種行為令人驚訝,因為人們會期望文字是其對應類型的實例。然而,它們不一致的原因在於基元和物件之間的區別。
遊戲中的原始主義
JavaScript 基元,例如字串、數字和布林值,是不是透過物件建構函數所建立的內建類型。相反,它們與 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>
如上所示,使用 String 建構子建立一個 String 對象,在使用 instanceof 測試時,該物件的計算結果將為 true。然而,原始字串文字“coral”不會繼承此行為。
替代類型檢查方法
帶有原語的instanceof的令人費解的行為導致了採用類型檢查的替代方法:
總之,instanceof 與原語的行為是JavaScript 獨特型別系統的結果。雖然這可能會導致混亂,但理解基元和物件之間的差異可以幫助開發人員有效地駕馭這些細微差別。
以上是為什麼字串、布林值和數字文字無法通過「instanceof」測試?的詳細內容。更多資訊請關注PHP中文網其他相關文章!