2

これは簡単な質問です。おそらくすぐに私を初心者としてマークするでしょうが、ここに行きます:-)

jquery cdn を使用するためのフォールバックを含むコード サンプルを見ると、&& または || を使用した非常によく似たアプローチが見られます。

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="js/vendor/jquery-1.10.2.min.js"><\/script>')</script>

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script>!window.jQuery && document.write('<script src="js/vendor/jquery-1.10.2.min.js"><\/script>')</script>

さて、私の質問は単純です: 2 つの間に (個人的な好みと読みやすさ以外に) 違いはありますか?

4

2 に答える 2

5

基本的に、これら 2 つのスクリプトは同じ機能を実行します。jQuery が CDN によって読み込まれたかどうかを確認し、そうでない場合はローカル コピーにフォールバックします。唯一の違いは、チェックの実行方法です。

最初のスクリプト

window.jQuery || 
  document.write('<script src="js/vendor/jquery-1.10.2.min.js"><\/script>')

jQuery の読み込みに失敗した場合はwindow.jQuery、または (undefinedまたは演算子) が使用さfalseれているため、ブール式の 2 番目の部分が評価され、スクリプトのローカル コピーが読み込まれます。前の条件が false の場合、オペレーターは各条件を評価するため、||これは基本的なorロジックです。||

2 番目のスクリプト

!window.jQuery && 
       document.write('<script src="js/vendor/jquery-1.10.2.min.js"><\/script>')

このスクリプトは jQuery のチェックを否定しているだけ!window.jQueryなので、jQuery が である場合undefined、これは (および否定された == が true の場合) と同等falseであり、ブール式の 2 番目の部分を評価し、ローカル コピーが読み込まれます。jQuery がロードされている場合、ブール式の最初の部分は否定されると false と同等になり、式の 2 番目の部分は評価されません。

ブール論理がどのように実行されるかを示す小さなスクリプトの例を次に示します。

!false && alert("First condition is true evaluate me");

false || alert("First condition is false evaluate me");

false && alert("I am never evaluated since first condition is false, entire condition is false.");

true || alert("I am never evaluated since first condition is true, entire condition is true");

ブール スクリプトの例: http://jsfiddle.net/kbLfB/

于 2013-07-19T07:52:14.913 に答える
1

以下の説明を理解していただければ幸いです。

||true を検索します ( trueが見つかった場合は検索を停止し、そうでない場合は false )

true  || false   --> true  (runs first  statement)
false || true    --> true  (runs second statement)
true  || true    --> true  (runs first  statement)
false || false   --> false (runs second statement)

&&現在のステートメントがtrue( in sequence )の場合、次のステートメントに移動します

true  && false   --> false (runs  second   statement)
false && true    --> false (stops at first statement)
true  && true    --> true  (runs  second   statement)
false && false   --> false (stops at first statement)

PS:また、 の説明nullundefinedもなりますfalse

于 2013-07-19T08:02:53.183 に答える