当我对Object.assign()使用原语时,结果显示为空对象

Sop*_*hia 12 javascript

我不理解示例的“原语将被包装到对象”部分。

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#Primitives_will_be_wrapped_to_objects

该示例显示将包装原语,但结果是一个空对象。

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:

  1. 让from为ToObject(nextSource)。
  2. 让密钥来自。[OwnPropertyKeys]。
  3. (迭代键,将其分配给第一个参数对象)

(您可以在某些原语上访问的属性位于原型上,并且不具有自己的键(如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)