Javascript 用对象包装基元值的结果是什么?
所以我在检查我朋友的作业,我看到我朋友使用了.map()到他的数组,它看起来像这样Javascript 用对象包装基元值的结果是什么?,javascript,object,Javascript,Object,所以我在检查我朋友的作业,我看到我朋友使用了.map()到他的数组,它看起来像这样 let numbers = ['1','2','3','4','5'] numbers = numbers.map(Number) // [1,2,3,4,5] [[Number: 1], [Number: 2], [Number: 3], [Number: 4], [Number: 5]] 数组中的所有元素数据类型都变成了数字。 然后我尝试用.map(Object)映射结果,结果如下所示 let numb
let numbers = ['1','2','3','4','5']
numbers = numbers.map(Number)
// [1,2,3,4,5]
[[Number: 1], [Number: 2], [Number: 3], [Number: 4], [Number: 5]]
数组中的所有元素数据类型都变成了数字。
然后我尝试用.map(Object)映射结果,结果如下所示
let numbers = ['1','2','3','4','5']
numbers = numbers.map(Number)
// [1,2,3,4,5]
[[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
(而Number.prototype
就是其中包含toFixed
方法的,这就是foo.toFixed
可以工作的原因)
通过显式地将原语转换为对象,您将看到它的typeof
是object
,并且如果以后访问它的属性,解释器将不会自动将它包装到对象中(因为它已经是一个对象)
const num=55;
const objNum=对象(num);
控制台日志(objNum类型);
console.log(
Object.getPrototypeOf(objNum)==Number.prototype
)
这几乎不是你需要自己处理的事情。当你试图访问原语的属性时,解释器将在内部执行此操作,例如:
const foo = 55;
foo.toFixed();
原语不是对象;原语数字本身没有toFixed
属性。当解释器看到您试图访问原语上的此类属性时,它会首先将原语转换为对象,即具有Number.prototype
(而Number.prototype
就是其中包含toFixed
方法的,这就是foo.toFixed
可以工作的原因)
通过显式地将原语转换为对象,您将看到它的typeof
是object
,并且如果以后访问它的属性,解释器将不会自动将它包装到对象中(因为它已经是一个对象)
const num=55;
const objNum=对象(num);
控制台日志(objNum类型);
console.log(
Object.getPrototypeOf(objNum)==Number.prototype
);
numbers=numbers.map(对象)
返回字符串数组numbers=numbers.map(对象)
返回字符串数组