首页 > 解决方案 > 在 JS 中,为什么我可以使用诸如 toFixed() 之类的函数,它驻留在原始类型的 Number 包装器对象的原型中?

问题描述

在 JavaScript 中,原始类型(数字、字符串等)不是对象。因此,它们没有 [[prototype]],因此不能使用某些对象的 [[prototype]] 中可用的方法。

而 Number、String 是包装对象,可用于使用关键字创建变量,我们可以在这些变量(使用关键字new创建)上使用 Number 对象原型中可用的方法。new

但是在给定的代码中,我创建了一个原始类型变量,并且能够使用toFixed()驻留在 Number 对象中的方法。

这让我很困惑。请详细说明这一点。

let a = 6.678; //primitive type

a= a.toFixed(1); // toFixed() resides in prototype of Number Object

console.log(a); // 6.7

标签: javascriptprimitive-types

解决方案


这与称为“自动装箱”的概念有关,Javascript 看到您正在尝试访问原始类型的属性,因此在运行时的很短的时间内,它将原始值转换为其相应的 Wrapper 对象和继续进行属性调用,然后在大多数情况下将值转换回原始类型。

let a = 6.678; //primitive type

a= a.toFixed(1); // JS converts a to "Number Object" and then the function is called

console.log(a); // 6.7

这是一个很好的答案javascript autobox 吗?


推荐阅读