为什么需要方括号来字符串化 Javascript 中 Map 的所有元素?
Why are square brackets needed to stringify all elements of a Map in Javascript?
问题:
对于为什么 javascript 地图需要 JSON.stringify 方法的方括号到 "reach"(?) 到嵌套元素中,我似乎找不到令人满意的解释。我想我遗漏了一些关于 ES6 的东西,或者是 Map 数据类型固有的东西。
我可以将 Map 转换为对象,然后进行字符串化 - 但为什么需要这个额外的步骤?
我的实验:
const blah = new Map();
blah.set('u', {
'something': [{'hey':98}, 56, 'bob']
});
blah.set({
'hey': {'hey': 78}
}, 'what?');
console.log(JSON.stringify(...blah));
//["u",{}]
//I thought this would yield the result of the below console.log
console.log(JSON.stringify([...blah]))
//[["u",{"something":[{"hey":98},56,"bob"]}],[{"hey":{"hey":78}},"what?"]]
//Why are the square brackets needed to stringify and display each element of
//the map?
这 article 证实了该行为,但没有解释为什么会发生。
JSON.stringify(...blah)
是 argument spread,它采用迭代地图时获得的值:
['u', {'something': …}]
[{'hey': …}, 'what?']
并将它们作为不同的参数传递给 JSON.stringify
:
JSON.stringify(
['u', {'something': …}],
[{'hey': …}, 'what?']
);
JSON.stringify
is supposed to be a replacer function 的第二个参数。因为你给了它一些不是函数的东西,它会忽略它。
争论的蔓延远不是你想要的。你想要的是将地图转换为 key/value 对的数组,这就是 [...blah]
所做的。 Array.from(blah)
效果相同。
问题: 对于为什么 javascript 地图需要 JSON.stringify 方法的方括号到 "reach"(?) 到嵌套元素中,我似乎找不到令人满意的解释。我想我遗漏了一些关于 ES6 的东西,或者是 Map 数据类型固有的东西。
我可以将 Map 转换为对象,然后进行字符串化 - 但为什么需要这个额外的步骤?
我的实验:
const blah = new Map();
blah.set('u', {
'something': [{'hey':98}, 56, 'bob']
});
blah.set({
'hey': {'hey': 78}
}, 'what?');
console.log(JSON.stringify(...blah));
//["u",{}]
//I thought this would yield the result of the below console.log
console.log(JSON.stringify([...blah]))
//[["u",{"something":[{"hey":98},56,"bob"]}],[{"hey":{"hey":78}},"what?"]]
//Why are the square brackets needed to stringify and display each element of
//the map?
这 article 证实了该行为,但没有解释为什么会发生。
JSON.stringify(...blah)
是 argument spread,它采用迭代地图时获得的值:
['u', {'something': …}]
[{'hey': …}, 'what?']
并将它们作为不同的参数传递给 JSON.stringify
:
JSON.stringify(
['u', {'something': …}],
[{'hey': …}, 'what?']
);
JSON.stringify
is supposed to be a replacer function 的第二个参数。因为你给了它一些不是函数的东西,它会忽略它。
争论的蔓延远不是你想要的。你想要的是将地图转换为 key/value 对的数组,这就是 [...blah]
所做的。 Array.from(blah)
效果相同。