Другой способ написания троичного оператора в JavaScript

#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;