对象字面值中的圆括号

对象中的圆括号是否只是分组操作符?

node-stringify会转换:

[ { a: 1 } ] 

string:

  [({'a':1}),({'a':2})] 

我能否认为这里的括号对数据没有影响,即使括号不存在也是完全一样的?

是的, (...)在这种情况下只是用于分组expression式。 省略括号对当前的数据结构没有任何影响。

在对象文字可能被解释为块语句的情况下,括号可以变得更有用,例如,在开发者控制台中计算expression式时,或者在ES6内部使用箭头函数时:

 const first = () => {a: 1} const second = () => ({a: 1}) console.log(first()) //=> undefined console.log(second()) //=> {a: 1} 

括号是这样的结果与eval工作,具体来说,他们是如何testingspec文件中的function。

在GitHub页面上,他们声明:

 // The parenthesis is to make the result work with `eval` console.assert(stringify({a: 1, b: 2}) === '({a:1,b:2})'); 

进一步解释:通常, eval{ token作为块的开始,而不是对象字面的开始。 通过将对象包装在括号中,eval将其解释为完整的expression式,并因此正确地返回parsing的对象字面值,这对作者testing非常重要,否则对于其他实现不重要(正如您已经注意到的那样)。

我不确定为什么node-stringify会在你描述的对象周围加上括号。 但是,是的,数据结构是相同的有或没有括号。

以下是浏览器中的JSON.stringify示例:

 var data = [ { 'a':1 }, { 'a':2 } ]; var stringified = JSON.stringify(data); console.log(stringified);