2010-12-03 4 views
4

私は、ウェブ上でこのようなコードを見てきました:本質的にはどのように使用するのが正しいですか? JavaScriptで "ifnull"としますか?

function MyEventHandler(e) 
{ 
    var ev = e || event; 
    var target = ev.srcElement || ev.target 
} 

は、||オペレータはa?a:bの省略形として使用されています。私が知る限り、すべてのブラウザで動作します。しかし、JScriptの、I see、たとえば、のために仕様を育てる:

は、2つの式の論理和を計算します。

JScriptでは、ブール値に非ブール値に変換するための次のルールを使用しています:

  • すべてのオブジェクトは、真とみなされます。

だから、結果はブール値の真偽でなければなりません。私は疑問に思っています - 私は文書化されていない振る舞いのナイフエッジを歩いていますか、ここでは私が拾っていない素晴らしい意味がありますか?

答えて

4

この動作は非常によく文書化されています。 ECMAScriptの仕様の章11.11を参照してください:http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf

を残念ながら、それは理解することは非常に簡単ではありません、しかし、最後の段落状態:

&または&した値|| 演算子は必ずしもタイプ ブール型である必要はありません。生成される値は、 が常に2つのオペランド式のうちの1つの値になります。

+0

ありがとう!これは私が探していた答えです! :) –

4

いいえ、私はあなたが||という合体動作を理解していると思います。

EDIT:

&&も融合剤です。 a && bは、a ? b : aのように動作します。

+0

これはどこに記載されていますか?どうして最初に 'a'と' b'をブール値に変換しないのですか? –

+0

変換はしませんが、変数を式として評価します。変数がnullまたは未定義の場合はfalseになります。演算子は常に式の代わりに変数の値を返します。 – airmanx86

1

JScriptの仕様では不正確です。 JScriptはECMAScript標準を実装しているため、実際の状況ではECMAScript仕様を参照する必要があります。

関連する問題