次のようなコードを見たことがありますか: a=a||""; おそらく JavaScript 初心者はこれに混乱するでしょう。今日は私の経験をいくつかお話します。
実際:
a=a||"defaultValue"; a=a||"defaultValue";
および:
if(!a){ a="defaultValue"; } if(!a){ a="defaultValue"; }
そして:
if(a==null||a==""||a==undefined){ a="defaultValue"; } if(a==null||a==""||a==undefined){ a="defaultValue"; }
同等です!
この問題を明確にするためには、まず JavaScript のデータ型を bool 型に変換すると何が起こるかという問題を理解する必要があります。
JavaScriptではデータ型を「true値」と「false値」に分けることができます。名前が示すように、true 値が bool に変換されると、値は true になり、false 値が bool に変換されると、値は false になります。次の表は、bool に変換されたときのいくつかの一般的なデータ型の値を示しています。
if 式では、JavaScript はまず条件式を bool 型に変換します。式が true の場合は、if のロジックが実行され、それ以外の場合はスキップされます。
if(!a){ a="defaultValue"; } if(!a){ a="defaultValue"; }
次に、「&&」と「||」の 2 つの式を見てみましょう。
JavaScript は弱い型付け言語であるため、JavaScript のこれら 2 つの式は他の言語 (Java など) の式とは異なる場合があります。
JavaScript では、「&&」演算子は次のように動作します:
&& の左側の式の値が true の場合は右側の式の値が返され、それ以外の場合は左側の式の値が返されます。
これは次のことを意味します:
var i=""&&"真值";//->i="" i="真值"&&"其他真值";//->i="其他真值" i="真值"&&"";//->i="" var i=""&&"真值";//->i="" i="真值"&&"其他真值";//->i="其他真值" i="真值"&&"";//->i=""
「||」演算子の演算規則は以下のとおりです。
|| の左側の式の値が true の場合は、左側の式の値が返され、それ以外の場合は、右側の式の値が返されます。
これは次のことを意味します:
var i=""||"真值";//->i="真值" i="真值"||"其他真值";//->i="真值" i="真值"||"";//->i="真值" var i=""||"真值";//->i="真值" i="真值"||"其他真值";//->i="真值" i="真值"||"";//->i="真值"
したがって、次のように理解できます:
a=a||"defaultValue"; a=a||"defaultValue";
以下では、プロセスを簡略化するために ||、&& を使用します:
var parameter=""; function test(parameter){ //return 真值 return true; } //真值操作 function operate1(parameter){ return "真值操作"; } //假值操作 function operate2(parameter){ return "假值操作"; } var result=test(parameter)&&operate1(parameter); result=test(parameter)||operate2(parameter); //等价于 result=test(parameter)?operate1(parameter):operate2(parameter); alert(result);//真值操作 //也等价于 if(test(parameter)){ result=operate1(parameter); }else{ result=operate2(parameter); } alert(result)//真值操作
別の例:
<script language="javascript" type="text/javascript"> var a =1; var b = 0; var c = 3; var d = a && b && c; window.alert(d); </script>
つまり、js の && は、true ではない最初の値 0 を返します (オブジェクトも使用できます)。すべてが true の場合は、最後の値が返されます。
<script language="javascript" type="text/javascript"> var a =0; var b = 3; var c = 5; var d = a || b || c; window.alert(d); </script>
たとえば、電子メールの形式を単純に確認したい場合、その形式は「@」と「.」の両方が同時に存在する場合にのみ正しいことになります。それ以外の場合は、エラー メッセージが表示されます。
どれを使えばいいですか?細かく見てみましょう:
if (form1.elements[3].value.indexOf("@",0)==-1 && form1.elements[3].value.indexOf(".",0)==-1){ alert("EMAIL地址输入错误!")}
少なくとも @ とのみ。 if 条件が true の場合、エラーが発生します。
両方が存在する場合、最後の値が返され、判定条件が成立するとif文が実行されます。ユーザーエラーを表示します。
したがって、&& を使用するのは明らかに間違っています。
は
に置き換える必要があります
if (form1.elements[3].value.indexOf("@",0)==-1 || form1.elements[3].value.indexOf(".",0)==-1){ alert("EMAIL地址输入错误!") }
両方が存在する場合: すべてが false、戻り値は false であるため、if 条件は確立されず、ステートメントは実行されず、エラーは表示されません。
1 つだけ存在する場合: false ではない最初の値を返します。エラーを示す場合は true を返します。
どちらも存在しません。false ではない最初の値を返し、true を返してエラーを表示します。
したがって、
を使用する必要があります。