首页 > web前端 > js教程 > 正文

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

Patricia Arquette
发布: 2024-11-02 12:00:05
原创
292 人浏览过

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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!