为什么Object.assign()拆分字符串并创建具有多个键的对象?

时间:2019-04-11 18:07:12

标签: javascript

如果将string literal传递给Object.assign(),它将创建一个具有多个object的{​​{1}},如下例所示:

keys

其背后的原因是什么,而不是返回var v1 = 'myTest'; var obj = Object.assign({}, v1); console.log(obj);

2 个答案:

答案 0 :(得分:2)

MDN

  

Object.assign()方法用于将所有可枚举的自身属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。

因此,字符串文字v1将被强制转换为object以使该方法起作用。将字符串文字强制转换为object时,将使用String()构造函数,您将获得一个具有数值属性的对象,一个array-like(具有length属性和索引元素的对象) ),但不是数组,即实际上与您进行new String(v1)的操作相同:

let v1 = "myString";
let obj = new String(v1);
console.log(obj);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}

您没有得到一个数组

为澄清起见,从object文字中得到的强制string是一个array-like对象,但不是是一个array可以在使用Array.isArray()进行检查的下一个测试中看到:

let v1 = "myString";

let strObj = new String(v1);
console.log(Array.isArray(strObj));

let arr = v1.split("");
console.log(Array.isArray(arr));
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}

有关array-like对象和数组差异的更多信息,也许您可​​以阅读下一个链接:

JavaScript - Difference between Array and Array-like object

答案 1 :(得分:0)

字符串的作用类似于字符数组,因此您得到的结果类似于以下内容

var o = Object.assign({}, ['m','y','s','t','r','i','n','g'])

console.log(o)