Object.assign中的JSON.stringify创建了多个属性

时间:2017-06-25 08:46:07

标签: javascript json

当我将它与Object.assign一起使用时,JSON stringify会向对象添加其他属性。

请您解释一下,为什么会发生这种情况以及如何避免这种情况?

实施例: https://jsbin.com/mikokomibu/edit?js,console

//////////////////Example without JSON////////////////////
let object = {}
object = Object.assign({}, object, object[1]=2);
console.log(object)
/////////////////////////////////////////////////////////
Output:
[object Object] {
1: 2
}

//////////////////Example with JSON/////////////////////
let objectNew = {}
let first = JSON.stringify(1);
let second = JSON.stringify(2);
objectNew  = Object.assign({}, objectNew , objectNew[first]=second);
console.log(objectNew);
/////////////////////////////////////////////////////////
Output:
[object Object] {
0: "2",
1: "2"
}

1 个答案:

答案 0 :(得分:3)

Object.assign遇到可迭代时,它会将其视为数组并将数字属性分配给目标对象:



x = Object.assign({}, 'abc')
console.log(x)




您的第一个代码段与此相同:

target = Object.assign({}, {1:2}, 2);

assignobject复制到目标,并跳过2,因为它是原语。

第二个片段是这样的:

target = Object.assign({}, {1:"2"}, "2");

此处,assignobject复制到目标,并处理"2",这是一个可迭代的,并且相当于{0:"2"},根据上述内容。所以,该片段变成了这个

target = Object.assign({}, {1:"2"}, {0:"2"});

解释了你的结果。