使用&&或||在CDN后备 - 有区别吗?

时间:2013-07-19 07:44:03

标签: jquery cdn fallback

这是一个快速的问题,可能会立即标记我为新手,但这里有: - )

在查看代码示例时,包括使用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 个答案:

答案 0 :(得分:5)

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

第一个脚本

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

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

第二个脚本

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

布尔脚本示例: http://jsfiddle.net/kbLfB/

答案 1 :(得分: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