我不明白示例中“基元将被包装到对象”部分。
示例显示基元将被包装,但结果是一个空对象。
var v1 = true;
var v2 = 10;
var v3 = Symbol('foo');
console.log(Object.assign({}, v1, v2, v3)); //ouput: {}
结果是因为原语像 null 和 undefined 一样被忽略了吗?
这个例子是什么意思?
最佳答案
是的,第一个之后的每个参数都将被转换 to an object , 但默认情况下基元没有任何可枚举的自有属性:
- Let from be ToObject(nextSource).
- Let keys be from.[OwnPropertyKeys].
- (iterate over keys, assign them to the first argument object)
(您可以在某些基元上访问的属性在原型(prototype)上,而不是自己的键(如 toFixed
)或不可枚举的(如 length
),因此它们不会被包括在内)
因此,结果对象没有键值对,因为 bool 值、字符串和符号都没有任何可枚举的自身属性。
如果您明确使用 new <primitiveType>
并为生成的包装对象分配一个属性,您会在结果中看到该属性:
var v1 = new Boolean(true); // please don't ever do this in real code
v1.foo = 'foo';
var v2 = 10;
var v3 = Symbol('foo');
console.log(Object.assign({}, v1, v2, v3));
关于javascript - 当我为 Object.assign() 使用基元时,结果显示为空对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55533054/