gpt4 book ai didi

javascript - 用 Object 包装原始值的结果是什么?

转载 作者:行者123 更新时间:2023-11-30 09:12:39 27 4
gpt4 key购买 nike

所以我正在检查我 friend 的作业,我看到我 friend 对他的数组使用了 .map(),它看起来像这样

let numbers = ['1','2','3','4','5']
numbers = numbers.map(Number)

// [1,2,3,4,5]

并且数组中的所有元素数据类型都变成了数字。然后我尝试用 .map(Object) 映射结果然后它看起来像这样

[[Number: 1], [Number: 2], [Number: 3], [Number: 4], [Number: 5]]

当我打印元素的typeof时,显示它是一个对象。但它被当作数字对待;我可以对它们使用比较运算符,并且可以像计算数字一样计算它。

[Number: 5] > [Number: 4] // true
[Number: 5] + [Number: 4] // 9

这是什么?

[Number: 1]

最佳答案

这几乎从来都不是您需要自己处理的事情。这是当您尝试访问原语的属性时解释器将在内部执行的操作,例如:

const foo = 55;
foo.toFixed();

基元不是对象;原始数字单独 没有toFixed 属性。当解释器发现您正在尝试访问原语上的此类属性时,它会首先将原语转换为对象 - 也就是说,具有 Number.prototype 内部原型(prototype)的东西(和Number.prototype 上有 toFixed 方法,这就是 foo.toFixed 可以工作的原因)。

通过显式地将原语转换为对象,您会看到它的typeofobject,如果以后访问它的属性,它就不会是由解释器自动包装在一个对象中(因为它已经是一个对象)。

const num = 55;
const objNum = Object(num);
console.log(typeof objNum);
console.log(
Object.getPrototypeOf(objNum) === Number.prototype
);

当您尝试在对象上使用 + 等运算符时,该对象将(尝试)首先转换为其原始值,以便可以发生比较、加法、串联等。

关于javascript - 用 Object 包装原始值的结果是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57404534/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com