2011-09-14 5 views
19

私は2番目の式を省略し、「短い三元」のためのPHPのサポートが好きになった:JavascriptはPHPのように短い三元(むしろバリエーション)をサポートしていますか?

// PHP 

$foo = 'hello'; 
$bar = ''; 

echo $foo ?: 'world'; // hello 
echo $bar ?: 'world'; // world 

Javascriptがこのような構文の任意の並べ替えをサポートしていますか? ?:の構文エラーが発生しました。私はブール的な短絡を認識していますが、それは私が現在やっていることにとって実現不可能です。それ:

// Javascript 

var data = { 
    key: value ?: 'default' 
}; 

何か提案がありますか?

+0

@NullUserException - 私はjQueryのを使用している、と私は*しながら、*キャッシュ私の選択を行い、デフォルト以外の値は.dataの() ''の呼び出しの結果であり、私がいました提案された構文を使用して2番目の呼び出しを避けるために探しているだけです(*一時変数に値を格納しないようにする*) – Dan

答えて

35
var data = { 
    key: value || 'default' 
}; 
+0

Nifty!ありがとう@SomeGuy - それはJavascript(*、任意の言語*)は、そのような比較から非ブール値を返すだろうが、ひどく奇妙に思えます。私はそれがゆるくタイプされていることを知っていますが、 – Dan

+0

単にデフォルト値を許可しようとしているならば、['$ .extend'](http://api.jquery.com/jQuery.extend/)は非常に便利な機能です。 – zzzzBov

+1

@Bracketworks:ブール演算子は、多くの(特に機能的な)言語でブール値を返しません。彼らは演算子の片側を返します(または 'false')。 – NikiC

12

はい、||を使う(私はすぐに呼び出された匿名関数でラップができ、それは愚かようです)。 PHPとは異なり、JavaScriptの||演算子は正規化されたブール値ではなく最初の偽の値を返します。

foo || 'world' 
+0

ありがとう@jimbojw - SomeGuyそれにもかかわらず:) – Dan

+3

ええ、まあ、まあ、それは答えを書くだけでなく、それを説明するために支払う価格です。 – jimbojw

+1

'var foo = foo' = _ = – Leonid

0
var myFunc = function(foo) { 
    foo = foo || 'my default value for foo'; 
} 
関連する問題