instanceof 与文字的不一致
JavaScript 的 instanceof 运算符,尽管其目的是检查对象是否是类的实例,但表现出一些文字的意外行为。本文深入探讨这些不一致之处,并揭示其背后的原因。
原始文字与对象文字
原始文字,例如字符串、数字和布尔值,存在于与 JavaScript 中创建的对象相比,这是一个独特的类型类别。以下示例说明了这种区别:
<code class="js">var color1 = new String("green"); color1 instanceof String; // returns true var color2 = "coral"; color2 instanceof String; // returns false (color2 is not a String object)</code>
虽然 color1 是从构造函数创建的 String 实例,但 color2 是原始字符串文字。
False 使用 instanceof 返回
意外的是,instanceof 对许多文字返回 false:
<code class="js">"foo" instanceof String // false true instanceof Boolean // false 12.21 instanceof Number // false</code>
这些基元不被视为其各自包装对象的实例。
异常数组和对象
数组和对象文字是规则的例外:
<code class="js">[0,1] instanceof Array // true {0:1} instanceof Object // true</code>
它们被视为相应构造函数的实例。
不一致的原因
不同的实例行为是故意的。 JavaScript 将基元视为不可变值而不是对象。因此,它们不继承任何类。数组和对象文字的例外是为了简化对象操作并保持与构造函数的一致性。
结论
在 JavaScript 中创建的原始文字和对象的不同之处在于与instanceof操作符的行为。这种区别可能既违反直觉又方便,具体取决于具体的用例。通过理解这种微妙的行为,开发人员可以在 JavaScript 代码中有效地利用 instanceof。
以上是为什么 JavaScript 中 `instanceof` 的行为与文字不同?的详细内容。更多信息请关注PHP中文网其他相关文章!