首页  >  文章  >  web前端  >  为什么 JavaScript 中的原语的 `instanceof` 行为不同?

为什么 JavaScript 中的原语的 `instanceof` 行为不同?

Patricia Arquette
Patricia Arquette原创
2024-11-02 12:00:05293浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn