2015-06-11 3 views
0
var prefix = options && options.prefix || ''; 

В JavaScipt в моем случае. Может ли кто-нибудь объяснить, что это за заявление или условие? Или в конце какое значение префикс переменная?Однострочная оценка короткого замыкания с && || в JavaScript

Я знаю о (тройной оператор):

condition ? expr1 : expr2 

, но это было по-другому.

+1

Что об этом ты не понимаешь? '&&' is 'AND', а' || '-' OR'. Что такое 'options'? – j08691

ответ

4

Это один лайнер эквивалент сказать:

var prefix; 
if(options && options.prefix){ 
    prefix = options.prefix; 
} else{ 
    prefix = ''; 
} 
+0

Что они называют этой техникой? Я знал однострочные условия вроде: a == b? '1': '2'; но в первый раз, чтобы увидеть его коротким. –

+1

@PooyaSanooei - Пример в вашем комментарии - [тройной оператор] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator). – j08691

+1

@PooyaSanooei они ** разные **, когда 'options.prefix' является' null' или 'undefined', эти два оператора возвращают другое значение. –

3

Оператор устанавливает переменную «префикс» либо значение «options.prefix», или пустая строка, таким образом, что, если «вариантов» не существует, оно не выдает ошибки.

0

Это значит, это options является объектом, используйте options.prefix. Если options.prefix - undefined или null или другое значение фальшивки, введите пустую строку.

Практически То же значение options ? options.prefix : ''.

1

Причина, по которой это работает, заключается в том, что логические операторы Javascript оценивают значение последнего операнда.

Так что существует объект-объект, & & часть выражения будет evaulated to options.prefix.

Если это не задано, левая часть || выражение будет ложным, а правая часть = строка '' - будет возвращена.

0

Его похожи на следующее:

var prefix; 
if(options){  // or for better understanding, its if(options != undefined) 
    prefix = options.prefix; 
} 
else 
    prefix = ''; 

Попробуйте следующую скрипку для лучшего понимания: http://jsfiddle.net/n41tfnh4/1/

1

В переводе на человеческий язык

Если переменная options определяется с некоторыми не-falsey стоимость

, а также имеет свойство options.prefix, значение которого также не имеет значения

затем установить переменную prefix с этим значением options.prefix.

В противном случае наш prefix по умолчанию содержит пустую строку.


PS. Быстро проверить полный список falsey значений в JavaScript с помощью Google "JavaScript falsy ценности"


Quicker объяснение

Это чек быстро значение (и получить) от options.prefix который по умолчанию пустая строка.

(без выбрасывания исключения, когда options не определено)

+0

Этот метод отличается от [тройных операторов] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator)? Похоже, мы используем || вместо: –

+1

Чтобы сделать эквивалентный результат, вы можете использовать * тернарные операторы * также: 'var prefix = options? (options.prefix || ''): '' ' –

Смежные вопросы