1

この質問に対する答えをどこから探し始めればよいかさえわかりません。このような構文は見たことがありません!

function (_d) {
    this.xiSWFPath = !_d ? "expressinstall.swf" : _d;
    this.setAttribute("useExpressInstall", true);
}

これは

this.xiSWFPath = if not (_d) [declared true, else false] then expressinstall.swf else _d

これが初心者の質問であることを感謝します!この構文の詳細はどこで確認できますか?

4

3 に答える 3

2

? :その遺産を少なくとも 70 年代の C までさかのぼることができるのは演算子です。

テスト式? 式1 :式2

テスト式が何か真実であると評価された場合、expression1 が評価され、それが全体の値になります。それ以外の場合は、expression2 です。

この演算子はかなり緩く、左から右にバインドします (PHP プログラマーは注意してください!)。かっこを使用することは常に安全であり、(多くの場合) より読みやすくなります。

これは式の文法の一部であることに注意してください。コンストラクトは、任意の式の一部としてどこにでも表示できます。あなたのサンプルでは、​​代入演算の右側の式です (varステートメントの一部として)。

于 2013-06-30T21:13:12.320 に答える
0

表示されているのは、条件演算子または三項演算子です (その用語を検索してみてください。たくさん見つかります)。

これは次のように展開されます

if(!_d) 
  this.xiSWFPath = "expressioninstall.swf";
else 
  this.xiSWFPath = _d;

if(!_d) は、それが宣言されているかどうかをもう少しチェックします。これは、_d がfalsyであるか、または false に評価されたかどうかを示しています。JavaScript ではかなりの数が false に評価されます。

if(_d in [undefined, null, 0, false, '', NaN]) //psydo-code does not work.

より非公式に、_d の値が適切でない場合は reexpressioninstall.swf を使用し、それ以外の場合は _d を使用します。

于 2013-06-30T21:22:07.873 に答える