Что такое Javascript?. Оператор? - PullRequest
1 голос
/ 08 мая 2020

Я создаю и отвечаю на этот вопрос для себя, потому что поиск в Google "Javascript?. Operator" не дает полезных результатов.

Вопросы о?. оператор, на который нужно ответить:

  1. Как называется этот оператор?
  2. Как работает оператор?
  3. Поддерживается ли этот оператор машинописным текстом?

1 Ответ

3 голосов
/ 08 мая 2020
  1. Это оператор нулевого распространения (также известный как экзистенциальный оператор). Использование оператора называется необязательной или условной цепочкой.
  2. Этот оператор полезен, когда необходимо получить доступ к глубоко вложенному правильно значению объекта, где промежуточные свойства могут иметь значение null / undefined.

Например, рассмотрим этот объект «Человек»

let person = {
  name : {
     first : "John",
     last : "Doe"
  },
  age : 31
}

Я бы получил доступ к фамилии этого человека как

let lastName = person.name.last;

Это все здорово, но что, если объект имени не существует? Ну, предыдущая строка кода выдала бы следующую ошибку:

Uncaught TypeError: невозможно прочитать свойство 'last' из undefined

Чтобы решить эту проблему, свойство name должно быть проверено на убедитесь, что он существует. Это превратит наш простой лайнер в следующий код

let lastName;
if(person.name){
 lastName = person.name.last;
}

или

let lastName = person && person.name && person.name.last

Первый вариант - это просто хлопот, а второй вариант тоже не хорош. (Я лично считаю, что синтаксис сбивает с толку). Для объяснения второй вариант проверяет, является ли человек правдивым, если это так, он проверяет, является ли person.name правдой, если это person.name.last будет сохранено в lastName.

Итак, вот маг c оператора нулевого распространения, я могу переписать все приведенные выше фрагменты как

let lastName = person?.name?.last

Теперь, если имя или имя равно null / undefined lastName будет установлено в null / undefined, и ошибка не будет. Для объектов с высокой степенью вложенности это может сэкономить много строк кода и проверки ошибок.

Технически это только предлагаемое изменение ES7 (https://github.com/tc39/proposal-optional-chaining), но работает, если вы опробуете его в консоли любого браузера Chrome.

Typescript поддерживает необязательное связывание с 3,7 https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html#optional -цепь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...