当我在javascript中'Object.assign`到原始类型时会发生什么?

时间:2017-03-02 16:18:27

标签: javascript

我发现您可以在javascript中的Object.assignstring类型上调用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`

所以我的问题是:现在这是什么类型的?是否有任何规范定义此行为?有什么理由不这样做吗?你能解释一下这里发生了什么吗?

1 个答案:

答案 0 :(得分:4)

在JavaScript中,几乎所有基本类型都具有等效的对象类型。因此,"x"是字符串原语,new String("x")是String对象。类似地,有数字基元和Number对象,布尔基元和Boolean对象等。

Object.assign的第一步是取第一个参数并在其上使用abstract ToObject operation,它执行原始到对象的步骤。从那时起,它使用ToObject返回的对象。 (如果ToObject已经是对象,ToObject只返回它的参数。)

该对象是assign最终返回的对象。