我不理解示例的“原语将被包装到对象”部分。
该示例显示将包装原语,但结果是一个空对象。
var v1 = true;
var v2 = 10;
var v3 = Symbol('foo');
console.log(Object.assign({}, v1, v2, v3)); //ouput: {}Run Code Online (Sandbox Code Playgroud)
结果是因为原语像null和undefined一样被忽略了吗?
这个例子是什么意思?
Cer*_*nce 10
是的,第一个参数之后的每个参数都将转换为一个object,但是默认情况下,基本体没有任何可枚举的self-properties:
- 让from为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));Run Code Online (Sandbox Code Playgroud)