#javascript #arrays #conditional-operator
#javascript #массивы #условный оператор
Вопрос:
Является ли эта логическая операция:
const user = users amp;amp; users[0] || null;
то же, что и эта условная / троичная операция:
const user = users ? users[0] : null;
? Предполагается users
, что это массив.
Комментарии:
1. Если
users
always — это массив, он всегда точен, и проверять его бессмысленно.
Ответ №1:
Нет, это не одно и то же. Если users[0]
значение falsey , то || null
оно будет выбрано в первом коде:
const users = [0];
const user1 = users amp;amp; users[0] || null;
const user2 = users ? users[0] : null;
console.log(user1, user2);
Условный оператор, вероятно, является лучшим выбором. Но, что еще лучше, в современном JavaScript вместо этого вы можете использовать необязательную цепочку, что еще более лаконично:
let users;
const user = users?.[0];
console.log(user);
(хотя, обратите внимание, что это дает вам undefined
, если вложенное свойство не существует, не null
)
Комментарии:
1. Интересно, я не знал о необязательной цепочке. Это похоже на безопасный вызов в Kotlin.
Ответ №2:
Использование users
само по себе не очень хороший способ выполнения тестов. Некоторые языки, такие как Go, разрешают тесты только на логические значения. С этой целью было бы лучше протестировать логическое значение, если это возможно. Что-то вроде:
const user = users.length > 0 ? users[0] : null;