为什么 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
理解区别
基元与对象:
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中文网其他相关文章!