# #javascript #typescript #firebase #google-cloud-functions
Вопрос:
Я добавляю проверку в свой код и, чтобы улучшить читаемость, написал следующее:
if (!uid) {
return {result: 0, message: 'You are not authorized.'}
}
Альтернативой было бы проверить, существует ли переменная:
if (uid) {
//do some code
}
Однако, если у меня есть много разных переменных для проверки, мне не нравится, когда их нужно вкладывать таким образом:
if (uid) {
if (otherVar) {
//do some code
} else {
//else code 1
}
} else {
//else code 2
}
Есть ли какая-то разница в выполнении метода 1 по сравнению с методом 2?
Ответ №1:
Ответ:
- Метод 1 проверяет только значение этой переменной. Если значение существует / равно
true
, то оно вернетсяtrue
. - Метод 2 проверяет наличие переменных после завершения первой проверки, и он возвращается
true
.
Мое мнение, на самом деле вам не обязательно делать это так. Вместо этого вы можете использовать дополнительный оператор цепочки для выполнения безопасных проверок внутри объекта. Например:
const adventurer = {
name: 'Alice',
cat: {
name: 'Dinah'
}
};
const dogName = adventurer.dog?.name; // notice the usage of '?'
console.log(dogName); // will return 'undefined' as 'dog' object does not exist in that object.
Цитирование документов MDN:
Оператор ?. функционирует аналогично оператору . оператор цепочки, за исключением того, что вместо того, чтобы вызывать ошибку, если ссылка является нулевой (нулевой или неопределенной), выражение замыкается с возвращаемым значением undefined. При использовании с вызовами функций он возвращает значение undefined, если данная функция не существует.
Оттуда вы можете использовать необязательную цепочку для упрощения вложенных блоков — например, с помощью глобального обработчика ошибок.
const result = uid?.otherVar?; // imagine 'otherVar' does not exist!
if (!result) return handleResult();
Дальнейшее чтение: