В чем разница между доступом к объекту JSON с использованием точки (.) и нотации [] в Javascript. Например,
var person = {
"firstName": "Foo",
"lastName":"Bar"
}
Я уверен, что доступ к переменным "firstName" и "lastName" дает мне один и тот же тип вывода (строку), т.е.
console.info(typeof person.firstName); // returns string
console.info(typeof person.lastName); // returns string
Кроме того, доступ к нему обоими способами, используя . или [] даст мне тот же результат:
console.info(person.firstName); // returns Foo
console.info(person['firstName']); // returns Foo
Я пытаюсь понять, когда использовать какие обозначения, а когда нет, и реальную разницу между ними. Я где-то читал, что мы не можем использовать точечную запись, если данные сложны, я не уверен, что это значит, проверил пару образцов входных данных:
"firstName": " Foo Bar "
"firstName": "@#@#$% Foo Bar!!!"
Интересно, что оба дают мне один и тот же результат, может кто-нибудь объяснить мне, в чем фактическая разница между этими двумя обозначениями и когда к ним обращаться?
Это опечатка, исправил! Спасибо за указание!
доступ с помощью [] больше используется, когда свойство будет динамическим, и вы не знаете, будет ли это firstName или lastName (возможно, потому, что он исходит от выбора пользователя или чего-то еще), поэтому вы сохраняете его в переменной и используете имя переменной, например : person[variableName]. Но в любом случае, оба метода действительны
Возможный дубликат Доступ к свойствам JavaScript: запись через точку или скобки? и Разница между использованием скобок ([]) и записи через точку (.)
Я нашел несколько дубликатов, просто погуглив название, не внося никаких изменений. См.: Какие исследовательские усилия ожидаются от пользователей Stack Overflow?
Здесь уже существуют три БОЛЬШИХ ответа: stackoverflow.com/a/4968448/5411817, stackoverflow.com/a/11922384/5411817 и stackoverflow.com/a/50738382/5411817.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Оба они являются допустимыми способами доступа к значениям объекта.
Эта статья очень плохая, нет такой вещи, как "объект JSON". У них часто отсутствует или просто неправильный контент, и вместо этого вам следует взглянуть на МДН.
Добро пожаловать в Stackoverflow!
Основное различие между ними заключается в том, что использование нотации в квадратных скобках позволяет вам определять и получать доступ к свойствам с пробелами в них, чего нельзя сделать с точечной нотацией.
var foo = {
"I AM BAR": 1
}
Если бы вы хотели получить доступ к единственному свойству "I AM BAR" на foo с обозначением скобок, это выглядело бы так: foo["I AM BAR"]. Это невозможно при записи через точку.
Это имеет смысл, забыл проверить это. Спасибо @Pyth
Разницы нет. Подход [] полезен, когда вам нужно найти ключ с переменной. Нравится:
const theKey = 'test';
theArray[theKey]; // this work
theArray.theKey; // this dont work
Используя точечную нотацию, вы должны указать точное имя свойства, но вы можете работать с именем при использовании [].
var person = {
"firstName": "Foo",
"lastName":"Bar"
}
С использованием . вы можете получить доступ только через
console.info(person.firstName); // returns Foo
Используя [] вы можете получить доступ к значению с помощью переменной
let couldChange = 'Name';
console.info(person['first'+couldChange]); // returns foo
console.info(person['last'+couldChange]); // returns bar
Большую часть времени вы будете использовать запись через точку. Если вам не нужно свойство объекта, к которому вам нужно получить доступ, чтобы быть динамическим. Это связано с тем, что значение, которое вы передаете в скобки, может быть переменной, если оно разрешается в строку. Проверьте эту ссылку для получения дополнительной информации:
https://codeburst.io/javascript-quickie-dot-notation-vs-bracket-notation-333641c0f781
В большинстве случаев разницы нет, см. Средства доступа к свойствам (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
Использование квадратных скобок может позволить вам использовать значение переменной для доступа к свойствам объекта, тогда как запись через точку — нет. Например:
var propName = 'age';
var o = {
name: 'Tom',
age: '29',
about: 'He\'s a cool guy!'
};
console.info(o.propName); // <-- Will be undefined
console.info(o[propName]); // <-- Bingo
console.info(человек['имя']); также должен возвращать Foo, а не Bar