如果将string literal
传递给Object.assign()
,它将创建一个具有多个object
的{{1}},如下例所示:
keys
其背后的原因是什么,而不是返回var v1 = 'myTest';
var obj = Object.assign({}, v1);
console.log(obj);
?
答案 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
对象和数组差异的更多信息,也许您可以阅读下一个链接:
答案 1 :(得分:0)
字符串的作用类似于字符数组,因此您得到的结果类似于以下内容
var o = Object.assign({}, ['m','y','s','t','r','i','n','g'])
console.log(o)