这两种对象声明方式有什么区别?

时间:2020-03-01 04:50:04

标签: javascript json

我只是想知道JSON对象声明的这些方式之间是否存在差异,或者它们做相同的事情?声明对象的标准方式(推荐)是什么?

根据我的测试,它们都给出相同的结果。

let data1 = {
  "record_1": [1,2,3],
  "record_2": [4,5,6]
}

let data2 = {
  record_1: [1,2,3],
  record_2: [4,5,6]
}

console.log(data1);
console.log(data2);
console.log(data1.record_1);
console.log(data2.record_1);
console.log(data1.record_2);
console.log(data2.record_2);
console.log(JSON.stringify(data1));
console.log(JSON.stringify(data2));

输出:

{
record_1:(3) [...],
record_2:(3) [...]
}
{
record_1:(3) [...],
record_2:(3) [...]
}
(3) [
1,
2,
3
]
(3) [
1,
2,
3
]
(3) [
4,
5,
6
]
(3) [
4,
5,
6
]
{"record_1":[1,2,3],"record_2":[4,5,6]}
{"record_1":[1,2,3],"record_2":[4,5,6]}

3 个答案:

答案 0 :(得分:3)

这两个声明均在Javascript中有效

let data1 = {
  "record_1": [1,2,3],
  "record_2": [4,5,6]
}

let data2 = {
  record_1: [1,2,3],
  record_2: [4,5,6]
}

但是关于JSON,data2是无效的JSON语法。您可以在https://jsonlint.com/

进行验证

另一个差异如下:

var obj = { "some key" : "Val" };  // Valid in JS

var obj = { some key : "Val" }; // invalid in JS

因此,对于JS而言,这两种减速都根据情况发挥不同的作用。通常,data2类型声明被广泛使用。

答案 1 :(得分:3)

对象的属性名称为 string 类型,如果您提供任何其他类型,则该属性类型将自动转换为 string

var obj = {1: "one"}
var keyName = Object.keys(obj)[0];
console.log(`key Name ${keyName} and type is ${typeof keyName}`);

我将首选显式的声明方式(使用引号),因为这将减少(来自代码阅读者的)混乱。

答案 2 :(得分:1)

它们基本上是相同的。区别在于使用引号时,可以使用特殊字符作为键。

// invalid
const noQuotes = {
    key with spaces: 123
}

// valid
const withQuotes = {
    "key with spaces": 123
}