首页  >  文章  >  web前端  >  为什么 JavaScript 中的“instanceof”对文字返回“false”?

为什么 JavaScript 中的“instanceof”对文字返回“false”?

DDD
DDD原创
2024-11-03 22:39:31772浏览

Why Does `instanceof` Return `false` for Literals in JavaScript?

Instanceof 和文字的奥秘

为什么 instanceof 运算符对某些文字返回 false?

在 JavaScript 中, instanceof 运算符检查对象是否是特定类或类层次结构的实例。但是,当应用于某些文字时,它的行为会出现意外。

文字,例如字符串、数字和布尔值,是直接在代码中定义的,而不是通过类创建的。让我们看一下以下示例:

"foo" instanceof String //=> false
"foo" instanceof Object //=> false

true instanceof Boolean //=> false
true instanceof Object //=> false

12.21 instanceof Number //=> false

// Array and Object literals are exceptions
[0,1] instanceof Array //=> true
{0:1} instanceof Object //=> true

理解区别

基元与对象:

  • 文字,例如字符串,数字和布尔值是基元。它们独立于任何类或实例而存在。
  • 对象,例如数组和使用 new 关键字创建的对象,是类的实例。

Instanceof 和 Primitives

instanceof 运算符仅检查对象是否是类或其后代的实例。由于基元不是通过类创建的,对于基元文字,instanceof 始终返回 false,即使文字的值与类类型匹配。

例外:数组和对象

数组和对象文字是此行为的例外。它们不是通过类构造的,但仍然分别被视为 Array 和 Object 类的实例。这可能是该语言的历史怪癖。

替代测试方法

要测试某个值是否属于某种原始类型,应该使用 typeof 运算符of instanceof:

typeof "foo" === "string" //=> true
typeof 12.21 === "number" //=> true

结论

Instanceof 对原始文字的行为不正确,因为它们不是任何类的实例。由于历史的怪癖,数组和对象文字是例外。在确定原语的类型时,建议使用 typeof 而不是 instanceof。

以上是为什么 JavaScript 中的“instanceof”对文字返回“false”?的详细内容。更多信息请关注PHP中文网其他相关文章!

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