2013-07-19 1 views
2

Это быстрый вопрос, который, вероятно, сразу заметишь, как новичок, но здесь идет :-)Использование && или || в резерве CDN - есть ли разница?

При взгляде на образцы кода, которые включают в себя запасной вариант для использования 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> 

Теперь, мой вопрос просто: есть ли разница (кроме личного preferenc e и смысл читаемости) между ними?

+0

Я думаю, что они используются для короткого кодирования .. (я мало знаю об этом) –

+1

Они одинаковы (в данном случае), если вы также принимаете '!' В начале во внимание (или его отсутствие). – Thilo

ответ

5

По существу эти два сценария выполняют ту же функцию. Они проверяют, загружен ли jQuery CDN, и если они не возвращаются к локальной копии. Единственная разница заключается в том, как выполняется проверка.

первый скрипт

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

Если JQuery не загружается, то window.jQuery будет undefined или false вызывает вторую часть логического выражения должны быть оценены так как || (или оператор) используется, в результате чего локальная копия загрузки скрипта. Это базовая логика or, так как оператор || будет оценивать каждое условие, если предыдущее условие является ложным.

Второй сценарий

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

Этот скрипт просто отрицая чек на JQuery, !window.jQuery, так что если JQuery является undefined, что эквивалентно false (и когда отрицается == к истинным) будет оценивать вторая часть булевского выражения, в результате чего загружается локальная копия. Если jQuery загружается, первая часть логического выражения эквивалентна false при отрицании, в результате чего вторая часть выражения не будет оцениваться.

Вот небольшой пример скрипта, как булев логик выдохся:

!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"); 

Boolean Script Пример:http://jsfiddle.net/kbLfB/

+0

Как я и думал тогда :-) И спасибо за то, что вы изложили это в подробном подробном объяснении! –

+0

@KimChristensen Рад, что я могу помочь. Вы увидите этот тип логики во множестве javascript. –

+0

@KevinBowersox Почему сценарий включает в себя \ /? то есть. <\/script> – agconti

1

Я надеюсь, что вы можете понять объяснение ниже:

|| ищет истину (останавливает поиск, если находит истину, иначе 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 (в последовательности)

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: null и undefined также приходит на счет false.

Смежные вопросы