这是一个快速的问题,可能会立即标记我为新手,但这里有: - )
在查看代码示例时,包括使用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>
现在,我的问题很简单:两者之间是否存在差异(个人偏好和可读性除外)?
答案 0 :(得分:5)
基本上这两个脚本执行相同的功能。他们检查CDN是否加载了jQuery,如果没有,则返回本地副本。唯一的区别是检查的执行方式。
第一个脚本
window.jQuery ||
document.write('<script src="js/vendor/jquery-1.10.2.min.js"><\/script>')
如果jQuery加载失败,那么window.jQuery
将undefined
或false
导致布尔表达式的第二部分被评估,因为||
(或运算符)是使用,使脚本的本地副本加载。这是基本的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:null
和undefined
也考虑了false
。