2011-12-06 16 views
3

私はあなたがこれを行うことができますことを知っている:`x && return 'が無効なのはなぜですか?

function first(a){ 
    a && console.log("true"); 
} 

と同じである:私はこの試みたとき、しかし

function first(a){ 
    if(a){ 
     console.log("true"); 
    } 
} 

:それは動作しません

function first(a){ 
    a && return false 
} 

を、それは私に誤りを投げます。なぜそれは私にエラーを与えているのですか?

+3

と評価された場合、これはBを返すだろう

if(A && return false) { //doesn't work } 

を試みるのと同じだ使用 '制御フローについてif'、および' && 'と論理的には。 –

+1

最初の2つの例は同じ効果がありますが、 'a && console.log(" true ")'は値を返す式であるため、実際は同じではありません(この場合は値を使用しません)。 – nnnnnn

答えて

10

returnは単独の声明でのみ使用できます。

a && return falseでは、それは構文的に間違った式の一部です。

+1

... 'console.log(...)'とは対照的に 'return'は関数呼び出しではないので、値を生成しないので式ではありません – Martin

+3

これは、 'new'のような文である演算子とキーワードは、式であるためインラインでOKです。ここでは、' return'、 'break'、' continue'のような文がブロックレベルです。 –

+0

私は私の答えをコミュニティのwikiにしました。ご意見をお寄せください。あなたはどちらも正しい。 – kay

0

あなたは、行の先頭にリターンを置くことによって、あなたが望む効果を得ることができます。

return a && console.log("true"); 

returnstatementの一部であり、オペランドのような式を(期待する場所に配置することはできません論理演算子の)。

+2

私は 'console.log'を返していません –

6

あなたが本当にそのようにやりたい場合は&&||よりも優先されますので、あなたは

return a && false || undefined 

またはmissingnoのために、

return (a && false) || undefined 

ような何かを行うことができ、それが最初に評価されますしかし、祝福は冷たく、いつもパーティーに落ちる。

また、スペックをチェックアウト:http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf - & &は短絡であるため、68ページには、表現演算子(new等)return(93ページ)のような文からどのように異なるかを示します

0

を最初の1のみ動作しますこれは、両方の式が真である場合にのみ真であることを意味します。

したがって、Aが評価されると(つまり、Aがヌル、未定義または空の文字列でない場合)、console.log (true)が真であるため、メソッドを呼び出す

Aが偽であれば、それをより明確にするための方法(短絡)

をコールする必要はありませんので、式はあなたが

A & console.log("test") 

をすれば、テストは関係なく記録されます、falseになりますが何の価値があるのですか

それは自分の声明であるため、2番目の動作しません...それは、正しい方法は

return A || B; 

Aはいっその偽

+0

_" Aが偽ならば、式は偽です "_ Aが偽の値を持つならば、式はAを返します(そうでなければ、もう一方のオペランドを返します)。だから、もしAが、例えば ""ならば、式は偽ではなく ""を返します。 – nnnnnn

+0

@nnnnnn、そうですが、それは私が説明しようとしたことではありません。私は&&が短絡演算子であることを説明することを意味し、最初の式がfalseに評価されるとき、式全体が偽であるため、2番目の式を評価しません – Andre

関連する問題