Использование var foo = bar && bar.getSomething (); в JavaScript

1

Я заметил в Javascript, я иногда видел

var foo = bar && bar.getSomething()

Я знаю, что это, вероятно, похоже на:

var foo;
if(bar !== undefined) {
   foo = bar.getSomething();
}

Но это все еще меня смущает. Потому что для меня это очень похоже на двоичную операцию, такую как:

0100 & 0101 == 0100;  //true

Тем не менее, это совсем другое с другой стороны, потому что, например, если bar является объектом, а bar.getSomething() возвращает целое число (говоря в следующем примере 5), и код заканчивается как:

var foo = {baz : qux} && 5;

для меня это явно не имеет смысла.

Итак, мой вопрос в том, почему в Javascript люди могут кодировать таким образом? Является ли это реализацией двоичной операции в JS? Как называется эта практика кодирования? есть ли преимущество в производительности по сравнению с традиционным способом? Спасибо

  • 2
    && является логическим И, а не побитовым И.
  • 0
    is there any performance benefit compared to the traditional way? Скорее всего нет, движки Javascript довольно умны в наши дни, такие микрооптимизации обычно ничего не дают. Основное использование - просто сделать код короче, это в основном говорит, продолжайте выполнять слева, пока что-то не вернет false. Вы можете связать их больше, чем просто 2, например .. action1 && action2 && action3, если action2 вернул false, action3 не будет выполнен.
Показать ещё 7 комментариев
Теги:

1 ответ

0
Лучший ответ

Я думаю, что вы запутались между оператором & и оператором &&, оператор & будет возвращать побитовое &, а оператор && возвращает последний операнд, если все значения истинны или первое значение ложности, если какое-либо из значений является ложным

console.log(4 & 5);
console.log(4 && 5);
console.log(!!(4 && 5));
console.log(0 && 5);
console.log(5 && 0);
console.log(null && 5);
console.log(5 && null);

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

  • 1
    "возвращает последний элемент или ложь". Это не правильно. Возвращает либо первый операнд, если он ложный, либо второй операнд. Он возвращает false только если один из операндов false .
  • 0
    да, я смешал два. но я немного запутался, зачем код таким образом, просто потому что он чистый?
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню