我不理解示例中的“原语将被包装到对象中”部分。
该示例显示了原始元素将被包装,但是结果是一个空对象。
var v1 = true;
var v2 = 10;
var v3 = Symbol('foo');
console.log(Object.assign({}, v1, v2, v3)); //ouput: {}
结果是因为原语像null和undefined一样被忽略吗?
这个例子是什么意思?
答案 0 :(得分:10)
是的,第一个参数之后的每个参数都将被转换to an object,但是默认情况下,基元没有任何可枚举的自有属性:
- 让我们成为ToObject(nextSource)。
- 让密钥来自。[OwnPropertyKeys]。
- (遍历键,将其分配给第一个参数对象)
(您可以在某些原语上访问的属性位于原型上,并且不具有自己的键(例如toFixed
)或不可枚举的属性(例如length
),因此不会包含它们)
因此,结果对象没有键值对,因为布尔值,字符串和符号都没有任何可枚举的自身属性。
如果您显式使用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));