JavaScript_javascript スキルにおけるブール演算子 || の使用スキルをまとめます。

WBOY
リリース: 2016-05-16 15:31:41
オリジナル
1445 人が閲覧しました

次のようなコードを見たことがありますか: 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 に変換されたときのいくつかの一般的なデータ型の値を示しています。
20151117145844514.png (315×284) 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"; 
ログイン後にコピー
のロジック。 a が false 値 (null、空の文字列と等しい) の場合、「defaultValue」が a に割り当てられ、それ以外の場合、a の値が a 自体に割り当てられます。


以下では、プロセスを簡略化するために ||、&& を使用します:



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> 

ログイン後にコピー
d の出力値は 0 です。d の値が 0 以外の値に変更された場合、d は常に 3 になります

つまり、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> 
ログイン後にコピー
d の出力値は 3 です。b の値が 0 に変更されると、d は常に 5 になります。すべてが 0 に変更されると、d の値は 0 になります。

<したがって、js の || は false ではない最初の値 (オブジェクトも許容されます) を返し、すべてが false の場合は最後の値を返します。
アプリケーション:


たとえば、電子メールの形式を単純に確認したい場合、その形式は「@」と「.」の両方が同時に存在する場合にのみ正しいことになります。それ以外の場合は、エラー メッセージが表示されます。

どれを使えばいいですか?細かく見てみましょう:

if (form1.elements[3].value.indexOf("@",0)==-1 && form1.elements[3].value.indexOf(".",0)==-1){ alert("EMAIL地址输入错误!")}

ログイン後にコピー
両方が存在する場合: && の両側は false です。 && は最初の true 値を返すため、if の判定条件は false となり、if 以降の文は実行されません。ユーザーにはプロンプトは表示されません。

少なくとも @ とのみ。 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 を返してエラーを表示します。

したがって、

を使用する必要があります。
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!