Это сообщение написано студентом-разработчиком Power Code Academy. Чтобы узнать больше об этой программе, следите за серией блогов Обучение собственных разработчиков начального уровня на Tech at Power.

Доступ к свойствам JavaScript

Свойства JavaScript - это значения, связанные с объектом JavaScript, который представляет собой набор неупорядоченных свойств. Мы даем объектам свойства, которые уникальны для них, чтобы мы могли хранить их, а затем извлекать их. По большому счету, это помогает нам сохранять наши объекты чистыми и согласованными, когда мы хотим получить определенные значения в будущем.

Теперь для целей этого блога предположим, что у нас есть ежемесячная коробочная подписка, которая предлагает видеоигру месяца с несколькими безделушками, соответствующими определенной теме. Мы были очень успешными, и теперь у нас есть огромная база данных, полная различных клиентов (каждый отдельный клиент будет в этом случае объектом), и каждый клиент имеет связанные с ними ценности, такие как его имя, фамилия, адрес, телефон. номер, адрес электронной почты, предыдущие заказы и т. д .:

const customer1 = {
    firstName: "Rick",
    lastName: "Sanchez",
    address: "C 137, Citadel of Ricks",
    phone: "555-123-rick",
    email: "[email protected]"
  }

Теперь Рик - один из наших постоянных клиентов, которым он пользуется уже довольно давно, поэтому мы хотим отправить ему небольшой благодарственный подарок. Наряду с этим подарком мы также хотим добавить рукописное письмо для этого дополнительного штриха. Поскольку он наш первый клиент, его идентификатор равен 1, и его легко найти, но теперь мы хотим получить доступ к его информации. Мы можем думать об объекте как об ассоциативном массиве. Ключи в этом массиве - это имена свойств объекта. У нас есть два способа доступа к атрибутам в объекте JavaScript:

  1. Точечная запись
  2. Обозначение скобок

Точечная запись

Атрибуты и функции объекта называются членами этого объекта, и доступ к ним осуществляется с помощью точечной нотации. Точечная запись используется чаще, чем скобка. Мы получаем доступ к свойствам, помещая точку после объекта, за которой сразу следует имя свойства, которое мы ищем (object.property). Например, если мы хотим найти имя нашего клиента, мы можем сделать что-то вроде этого:

customer1.firstName 
// => "Rick"
  
customer1.lastName 
// => "Sanchez"

Мы можем использовать JavaScript для добавления обоих имен и возврата полного имени нашего постоянного клиента:

const fullName = customer1.firstName + " " + customer1.lastName
  
Console.log(fullName)
// => Rick Sanchez

Точечная запись намного легче читается, чем скобка, и поэтому используется чаще.

Обозначение скобок

В скобках мы используем вычисляемый оператор доступа к члену, который представляет собой пару квадратных скобок []. Мы можем получить тот же эффект от использования точечной записи с использованием скобок:

customer1['firstName']
  // => "Rick"
  
customer1['lastName']
// => "Sanchez"

Обозначение в скобках немного сложнее для чтения, чем обозначение через точку. Однако есть две основные ситуации, когда мы используем скобки.

1. Всякий раз, когда у нас есть нестандартные ключи: это означает, что строка, которую мы использовали в качестве ключа, имеет странную форму, которая варьируется от точек в ключе, дефисов, символов и пробелов (обычно мы хотим в camelCaseEverything). Например:

  customer1.'plumbuses returned: customer_wasnt_a_fan';
  // ERROR: Uncaught SyntaxError: Unexpected string
  
  customer1['plumbuses returned: customer_wasnt_a_fan'];
  // => "No way, everyone has a plumbus in their home"

2. Всякий раз, когда мы хотим получить динамический доступ к свойствам: с помощью скобок мы можем поместить любое выражение в скобки, и механизм JavaScript вычислит его значение, чтобы выяснить, к какому свойству получить доступ:

  customer1['first' + 'Name']
  // => "Rick"

Основное преимущество динамического доступа к свойствам - это возможность вычислять значения переменных или констант, которые мы можем присвоить. Возвращаясь к нашему исходному объекту, допустим, мы хотим назначить address как мультивселенную:

const customer1 = {
  address: "C 137, Citadel of Ricks",
 }
 customer1.address
 // =>"C 137, Citadel of Ricks"
 let multiverse = 'address';
 customer1[multiverse]
 // => "C 137, Citadel of Ricks"
 customer1['address']
 // => "C 137, Citadel of Ricks"
 customer1.multiverse
 // => undefined

Таким образом, скобочная нотация не такая явная, как точечная, но она позволяет нам передавать ключи, которые либо не находятся в обычном camelCase, либо включают числа или значения, хранящиеся в переменной.

Смотри, Морти ...

Вкратце:

  • Точечная нотация может только читать и получать доступ к буквенно-цифровым свойствам, она не может начинаться с числа и не может быть переменной.
  • Точечная нотация может читать _ и $
  • Нотация в скобках может читать и получать доступ к строкам или переменным, которые ссылаются на строку.
  • Нотация в скобках достаточно динамична, чтобы читать переменные, ключи с пробелами и символами, а также строки, начинающиеся с цифр.