2012-01-16 5 views
63

Я знаю, что в PHP 5.3 вместо того, чтобы использовать эту избыточную трехкомпонентную синтаксис оператора:Javascript сокращенная тройная оператор

startingNum = startingNum ? startingNum : 1 

... мы можем использовать сокращенный синтаксис для наших трехкомпонентных операторов, где это применимо:

startingNum = startingNum ?: 1 

И я знаю о тройном оператора в JavaScript:

startingNum = startingNum ? startingNum : 1 

... но есть shortha й?

Спасибо, ребята!

ответ

102
var startingNumber = startingNumber || 1; 

Что-то вроде этого, что вы ищете, где оно по умолчанию, если оно не определено?

var foo = bar || 1; // 1 
var bar = 2; 
foo = bar || 1;  // 2 

Кстати, это работает для многих сценариев, в том числе объектов:

var foo = bar || {}; // secure an object is assigned when bar is absent 
+1

Я думаю, что это C# –

+0

Действительно, были подпрыгивая этим утром. Исправлено, но спасибо, что заметили. –

+1

Вы не имеете в виду '||' вместо '??'? –

13

|| возвратит первый truthy значение, которое он встречает, и, следовательно, может быть использован в качестве оператора коалесценции, аналогичный на с # ??

startingNum = startingNum || 1; 
+0

@Web_Designer - проблем нет. –

+0

Мне нравится ваше объяснение больше, чем другие – ajax333221

+0

@ ajax333221 - спасибо! –

10

Да, есть:

var startingNum = startingNum || 1; 

В общем, expr1 || expr2 работает следующим образом (как указано на the documentation):

Возвращает expr1, если он может быть преобразован в true; в противном случае возвращается expr2. Таким образом, при использовании с значениями Boolean, || возвращает true, если один из операндов true; если оба они false, возвращает false.

+0

Не вернее ли говорить «если a является правдой» или «если a оценивается как истина»? – JaredPar

+3

@ JaredPar: Чтобы избежать двусмысленности, я заменил свое первоначальное подробное объяснение на одно из Mozilla Developer Network. Он должен быть менее двусмысленным. – Tadeck

1
var startingNum = startingNum || 1; 

В этом случае, вы можете использовать оператор OR.

0

Вышеуказанные ответы верны. В JavaScript следующее заявление:

startingNum = startingNum ? otherNum : 1 

может быть выражен как

startingNum = otherNum || 1 

Другой сценарий не распространяется здесь, если вы хотите, чтобы значение возвращать ложь, когда не совпадают. Сокращенная JavaScript для этого:

startingNum = startingNum ? otherNum : 0 

Но оно может быть выражено как

startingNum = startingNum && otherNum 

Просто хотел, чтобы покрыть другой сценарий в случае, если другие искали более обобщенного ответа.

0
startingNum = startingNum || 1 

Если у вас есть состояние с нулевой, как

startingNum = startingNum ? startingNum : null 

вы можете использовать '& &'

startingNum = startingNum && startingNum 
0

Чтобы тройная как:

boolean_condition ? true_result : false_result 

в JavaScript, вы можете сделать:

(boolean_condition && true_result) || false_result; 

Пример:

(true && 'green') || 'red'; 
=> "green" 
(false && 'green') || 'red'; 
=> "red" 
Смежные вопросы