对象字面值中的圆括号
对象中的圆括号是否只是分组操作符?
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);