Я заинтересован в практическом применении декларирование переменных с использованием &&
так:Использование логических и в Javascript Объявления переменных
var x = undefined && 4;
// Evaluate to the first falsey value
// or else the last value.
eval(x);
// undefined
Я понимаю, как оценивается значение (см this SO answer). Я также понимаю, его сестра ||
(см here для большого описания), и почему это было бы полезно, чтобы объявить переменную следующим выражением:
// Some other variable
var y;
var x = y || 4;
// Evaluate to the first truthy value
// or else the last value.
Практически: Используйте первое значение, если что первое значение не falsey; если это так, используйте последнее значение. Мы можем продемонстрировать эту особенность ||
в консоли браузера:
> null || 4
4
> 4 || null
4
> null || undefined
undefined
> undefined || null
null
> true || 4
true
> 4 || true
4
Как для &&
:
> null && 4
null
> 4 && null
null
> null && undefined
null
> undefined && null
undefined
> true && 4
4
> 4 && true
true
Должны ли мы принять это означает: использовать первое значение, если что первое значение не truthy; если да, используйте последнее значение?
Я заинтересован в использовании ярлыков для кодирования, чтобы свести к минимуму использование условных операторов, и я задаюсь вопросом, могу ли я как-нибудь использовать это.
Я нашел пример этого метода кодирования в line 472 источника основного JQuery:
scripts = !keepScripts && [];
Таким образом, вопрос заключается в следующем: Может ли кто-нибудь описать хороший контекст для использования &&
в яваскрипта объявлении переменной? Считаете ли вы, что это плохая практика?
Спасибо!
Я лично рекомендовал бы против этого: это действительно не очень читаемо. Не зная об этом поведении, я ожидал бы что-то вроде '! KeepScripts && []' для оценки «false», что может привести к некоторым трудностям для отслеживания ошибок. – ChrisC
Я бы написал нормальные условные утверждения, а затем использовал предварительные мини-инструменты, такие как [Google Closure Compiler] (https://developers.google.com/closure/compiler/), чтобы минимизировать код. –