鉴于文字数字不是严格意义上的 实例Number
,为什么我可以在相应的文字对象上调用Number
(或String
,或Boolean
)对象的原型方法?这是跨浏览器的标准行为吗?
发生这种情况时究竟发生了什么?我怀疑它在调用方法之前将文字强制转换为相应的类型,因为当我检查typeof this
方法时,它返回'object'
而不是'number'
.
鉴于文字数字不是严格意义上的 实例Number
,为什么我可以在相应的文字对象上调用Number
(或String
,或Boolean
)对象的原型方法?这是跨浏览器的标准行为吗?
发生这种情况时究竟发生了什么?我怀疑它在调用方法之前将文字强制转换为相应的类型,因为当我检查typeof this
方法时,它返回'object'
而不是'number'
.
文字不会被强制转换为实例。
内部发生的事情是创建一个实例,将值复制到该实例并使用该实例执行该方法。然后实例被销毁。文字实际上并未用于执行该方法。当字符串原语像 String 对象一样使用时,这种“包装器”对象概念也与字符串原语一起使用。这种行为是标准的。
3 是数字文字。不是 Number 类型的实例。JavaScript 具有原始数字类型和本机 Number 对象。
来自MDN:在要在原始字符串上调用方法或发生属性查找的上下文中,JavaScript 将自动包装字符串原始并调用方法或执行属性查找。