我发现您可以在javascript中的Object.assign
或string
类型上调用number
来获得某种“增强型”原始类型。
// closure used to create object for simplicity
function makeObj() {
let value = 6;
let enhancedValue = Object.assign(value, {
set: () => 'from the set method'
})
return {
someValue: enhancedValue
};
}
let myObj = makeObj();
// output is from nodejs
console.log(myObj.someValue); // accessing
// outputs: `{ [Number: 6] set: [Function: set] }`
console.log(myObj.someValue + 3); // using
// outputs: `9`
console.log(myObj.someValue.set()) // using method
// outputs: `from the set method`
所以我的问题是:现在这是什么类型的?是否有任何规范定义此行为?有什么理由不这样做吗?你能解释一下这里发生了什么吗?
答案 0 :(得分:4)
在JavaScript中,几乎所有基本类型都具有等效的对象类型。因此,"x"
是字符串原语,new String("x")
是String对象。类似地,有数字基元和Number
对象,布尔基元和Boolean
对象等。
Object.assign
的第一步是取第一个参数并在其上使用abstract ToObject operation,它执行原始到对象的步骤。从那时起,它使用ToObject返回的对象。 (如果ToObject已经是对象,ToObject只返回它的参数。)
该对象是assign
最终返回的对象。