window.Zepto = Zepto;
'$' in window || (window.$ = Zepto);
|| 这个是什么意思?
或者,逻辑运算符
如果在一个逻辑表达式中遇到一个非布尔类型的操作数,那么该操作数的值就会成为该表达式所返回的结果
在题主例子中,可以如下分析:
-
'$' in window
是判断window
是否有$
属性,in
返回ture
或false
- 如果返回
true
,||
操作符会偷懒,不会计算后面的window.$ = Zepto
- 这时候整个表达式返回结果也是
true
- 如果返回
false
,会继续进行计算,这时候就会给window
创建一个$
属性,并且引用Zepto
- 这时候整个表达式返回的结果就是对
Zepto
的引用(Zepto
是一个对象) - 右边的赋值操作必须加括号,否则会
Error
其他类似例子如
var example1 = true && 'Hello World';//'Hello World'
var example2 = (function(){return 1;},function(){return 2;})();//2
第一句是将封装好后的zepto暴露到全局,这样zepto才能在全局作用域被调用。
第二句是如果window没有有$这个属性,那么将$赋值window.$,用途是防止库冲突。
这里的逻辑运算符的作用是根据左侧表达式的布尔值来决定要不要接着执行右边的表达式。
短路运算符 第一个为真 不执行下一表达式 第一个为假 执行下面表示
这个叫做短路表达式,是编译器为了优化编译过程采取的行为。如 false && (i++); 由于逻辑与只要一项为假,结果就为假,所以i++不会执行。如 true || (i++),也是同样的道理
或
,这一句本身是个会返回true或false的表达式
A || B
如果表达式A为真则返回真,如果A为假则返回B的返回值。
从应用上来说,一般B是一条希望当A为假时执行的语句。这里判断$有没有在window里定义,没有就给$赋上值