为什么在 JavaScript 中,'3 instanceof Number' == false,但 '3..method()' 会调用 Number.prototype.method?

IT技术 javascript type-coercion
2021-03-10 20:58:52

鉴于文字数字不是严格意义上的 实例Number,为什么我可以在相应的文字对象上调用Number(或String,或Boolean)对象的原型方法这是跨浏览器的标准行为吗?

发生这种情况时究竟发生了什么?我怀疑它在调用方法之前将文字强制转换为相应的类型,因为当我检查typeof this方法时,它返回'object'而不是'number'.

1个回答

文字不会被强制转换为实例。

内部发生的事情是创建一个实例,将值复制到该实例并使用该实例执行该方法。然后实例被销毁。文字实际上并未用于执行该方法。当字符串原语像 String 对象一样使用时,这种“包装器”对象概念也与字符串原语一起使用。这种行为是标准的。

3 是数字文字。不是 Number 类型的实例。JavaScript 具有原始数字类型和本机 Number 对象。

来自MDN:在要在原始字符串上调用方法或发生属性查找的上下文中,JavaScript 将自动包装字符串原始并调用方法或执行属性查找。

是的,这是标准行为。
2021-04-16 20:58:52
编辑是纯粹的语法。在规范中没有任何引用的情况下,这种复杂的拳击是一个非常大的断言。您区分类型的方式具有误导性。
2021-04-29 20:58:52
@您不断编辑您的问题,我不断更新我的答案以跟上!
2021-05-07 20:58:52
这根本不是我要问的。那是给定的。问题是为什么我可以在不是数字的文字上调用 Number 的方法。
2021-05-08 20:58:52