对象文字中的括号

时间:2017-03-18 04:15:33

标签: javascript node.js stringify

对象文字中的括号是否只是分组运算符?

node-stringify会转换:

 [ { a: 1 } ]

到字符串:

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

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

3 个答案:

答案 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);