JS-访问JSON对象时,句点和[]之间的差异

时间:2019-01-30 17:40:33

标签: javascript json

使用句点(。)和Java中的[]表示法访问JSON对象有什么区别。例如,

var person = {
    "firstName": "Foo", 
    "lastName":"Bar"
}

我确定访问“ firstName”和“ lastName”变量会为我提供相同的输出类型(字符串),即。

console.log(typeof person.firstName); // returns string
console.log(typeof person.lastName); // returns string

也可以使用两种方式访问​​它。或[]将给我相同的结果:

console.log(person.firstName); // returns Foo
console.log(person['firstName']); // returns Foo

我试图了解何时使用哪种表示法,何时不使用哪种表示法以及它们之间的实际区别。我读过某个地方,如果数据很复杂,我们就不能使用点号了,我不确定这意味着什么,并测试了一些示例输入数据:

"firstName": " Foo Bar "
"firstName": "@#@#$% Foo Bar!!!" 

有趣的是,两者都给我相同的结果,有人可以解释一下这两种表示法的实际区别是什么,何时访问哪些?

7 个答案:

答案 0 :(得分:1)

它们都是访问对象值的有效方法。

答案 1 :(得分:0)

欢迎来到Stackoverflow!

两者之间的主要区别在于,使用括号表示法可以定义和访问带有空格的属性-这是点表示法无法实现的。

uv_udp_*

如果要访问var foo = { "I AM BAR": 1 } 上的单个属性"I AM BAR",请使用方括号表示法,它看起来像:foo。点表示法是不可能的。

答案 2 :(得分:0)

没有区别。 当您需要找到带有变量的键时,[]方法很有用。 喜欢:

const theKey = 'test';
theArray[theKey]; // this work
theArray.theKey; // this dont work

答案 3 :(得分:0)

使用点符号必须提供确切的propertyName,但是在使用[]时可以使用该名称。

var person = {
    "firstName": "Foo", 
    "lastName":"Bar"
}

使用。您只能通过

访问
console.log(person.firstName); // returns Foo

使用[],您可以通过变量访问值

let couldChange = 'Name';
console.log(person['first'+couldChange]); // returns foo
console.log(person['last'+couldChange]); // returns bar

答案 4 :(得分:0)

大多数时候,您将使用点表示法。除非您需要对象的属性,否则您需要动态访问。这是因为您传递到方括号中的值可以是变量,只要它解析为字符串即可。查看此链接以获取更多信息:

https://codeburst.io/javascript-quickie-dot-notation-vs-bracket-notation-333641c0f781

答案 5 :(得分:0)

在大多数情况下,没有区别,请参见Property accessors (MDN),但是当属性名称不是有效的标识符名称(例如,当它的表示形式不是字符串或需要使用变量来命名属性时。

obj[1]   // is valid
obj["1"] // is the same
obj.1    // is NOT valid

const propertyName = 1;
obj[propertyName] // the same as obj[1]
obj.propertyName  // not same

答案 6 :(得分:0)

使用方括号可以允许您使用变量值来访问对象属性,而点符号则不能。例如:

var propName = 'age';

var o = {
  name: 'Tom',
  age: '29',
  about: 'He\'s a cool guy!'
};

console.log(o.propName); //  <-- Will be undefined
console.log(o[propName]); // <-- Bingo