首页 > 解决方案 > 为什么 Object.assign() 拆分字符串并创建具有多个键的对象?

问题描述

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

var v1 = 'myTest';
var obj = Object.assign({}, v1);
console.log(obj);

这背后的原因是什么,而不是返回{0:'myTest'}

标签: javascript

解决方案


来自MDN

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

因此,字符串文字v1将被强制转换object为方法才能工作。当字符串文字被强制转换为object时,使用String()构造函数,您将获得一个具有数字属性的array-like对象(具有长度属性和索引元素的对象),但不是数组,即实际上相同好像你这样做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;}

你没有得到一个 Array

只是为了澄清起见,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 - 数组和类数组对象之间的区别


推荐阅读