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>

现在,我的问题很简单:两者之间是否有区别(除了个人偏好和可读性)?

4

2 回答 2

5

本质上,这两个脚本执行相同的功能。他们检查 jQuery 是否被 CDN 加载,如果没有,他们会退回到本地副本。唯一的区别是执行检查的方式。

第一个脚本

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

如果 jQuery 加载失败,window.jQuery则将undefinedfalse导致布尔表达式的第二部分被评估,因为使用了||(或运算符),从而加载脚本的本地副本。这是基本or逻辑,因为当前||面的条件为假时,运算符将评估每个条件。

第二个脚本

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

这个脚本只是否定对 jQuery, 的检查!window.jQuery,所以如果 jQuery 是undefined,相当于false(并且当否定 == 为 true 时)它将评估布尔表达式的第二部分,导致本地副本被加载。如果加载了 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");

布尔脚本示例: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如果当前语句是(按顺序),则转到下一条语句

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 回答