javascript - 当我为 Object.assign() 使用基元时,结果显示为空对象

标签 javascript

我不明白示例中“基元将被包装到对象”部分。

https://developer.mozilla.org/en-US/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: {}

结果是因为原语像 null 和 undefined 一样被忽略了吗?

这个例子是什么意思?

最佳答案

是的,第一个之后的每个参数都将被转换 to an object , 但默认情况下基元没有任何可枚举的自有属性:

  1. Let from be ToObject(nextSource).
  2. Let keys be from.[OwnPropertyKeys].
  3. (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/

相关文章:

javascript - 将 jquery 脚本转换为 Prototype Scriptaculous?

javascript - 是否可以使用blade 将参数传递给tinymce.init 函数?

javascript - 每当输入文本字段更改时,如何在 RoR 中提交表单?

javascript - 如何在 Javascript 中定义可选参数

javascript - 如何让鼠标远离这些颗粒

javascript - 创建对象的两种方法,不确定有什么区别或使用哪一种

javascript - Reactjs 输入上传不返回本地 URL

javascript - 如何将每个循环变量值插入数组

javascript - jQuery + Fancybox HREF 参数不刷新/缓存

用于复选框检查的 Java 字符串到 JavaScript 字符串数组