当我将它与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"
}
答案 0 :(得分:3)
当Object.assign
遇到可迭代时,它会将其视为数组并将数字属性分配给目标对象:
x = Object.assign({}, 'abc')
console.log(x)

您的第一个代码段与此相同:
target = Object.assign({}, {1:2}, 2);
assign
将object
复制到目标,并跳过2
,因为它是原语。
第二个片段是这样的:
target = Object.assign({}, {1:"2"}, "2");
此处,assign
将object
复制到目标,并处理"2"
,这是一个可迭代的,并且相当于{0:"2"}
,根据上述内容。所以,该片段变成了这个
target = Object.assign({}, {1:"2"}, {0:"2"});
解释了你的结果。