对象文字中的括号是否只是分组运算符?
node-stringify会转换:
[ { a: 1 } ]
到字符串:
[({'a':1}),({'a':2})]
我能否认为这里的括号对数据没有影响,即使括号不存在也完全相同?
答案 0 :(得分:1)
是的,在这种情况下,(...)
只是用于分组表达式。省略括号对您当前的数据结构没有影响。
在对象文字可能被解释为block statement的情况下,括号可能会变得更有用,例如在开发人员控制台中评估表达式或在ES6 Arrow函数中使用时:
const first = () => {a: 1}
const second = () => ({a: 1})
console.log(first()) //=> undefined
console.log(second()) //=> {a: 1}

我怀疑这就是node-stringify
提名将其包含在输出中的原因 - 尽可能避免歧义。
答案 1 :(得分:1)
括号是如此,结果与eval
一起使用,具体来说,就是他们如何测试spec文件中的功能。
在GitHub page本身上,他们声明:
// The parenthesis is to make the result work with `eval` console.assert(stringify({a: 1, b: 2}) === '({a:1,b:2})');
进一步解释:通常,eval
会将{
标记解释为块的开头,而不是对象文字的开头。通过将对象包装在括号中,eval将其解释为完整的表达式,从而正确地返回解析的对象文字,这对于作者测试很重要,否则对其他实现不重要(就像你一样)已经注意到了。)
答案 2 :(得分:0)
我不确定为什么node-stringify会在你描述的对象周围添加括号。但是,无论有没有括号,数据结构都是相同的。
以下是浏览器中JSON.stringify
的示例:
var data = [
{
'a':1
},
{
'a':2
}
];
var stringified = JSON.stringify(data);
console.log(stringified);