javascript - 在 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
解决方案
这与称为“自动装箱”的概念有关,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 吗?
推荐阅读
- sql - Go SQL 连接器不会给我特殊选择查询的结果
- java - Java Array嵌套for循环,不清除第二个for回到第一个
- java - 打包为 .jar 时,vscode 控制台中的 Java 代码无法正常运行
- java - 对话框 NullPointException
- sas - 在 SAS/WPS 中使用 if then 语句设置宏变量
- jquery - JQuery 可排序“Out”事件
- ceph - CEPH Octupus:ceph 命令挂起。普罗米修斯也没有数据
- javascript - vue 从外部 vue 导入数据用于组件,是否需要深拷贝
- java - 如何使 Intellij IDEA 仅在悬停时显示推断局部变量的 Java 类型提示?
- text - 如何将没有列名的文本文件导入 SAS 格式 SAS Viya?