如果对象继承自特定类,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中文网其他相关文章!