有这么一种常见的语句:数组
var
a = a || 4;
插件
那赋值语句中的“&&”操做符和"||"操做符是什么意思?如何知道这两个逻辑操做符两旁的数据哪一个会被赋值到等号左边的变量里面?其实,会被赋值到等号左边的变量里面的必定是起决定性因素的那个变量。其实这就是if...else的变种,要么a=a,要么a=4。虽然没那么直接,不过也省了很多代码。code
什么是起决定性因素的变量?ip
咱们知道,两个bool型变量a和b进行与操做,只有a和b的值都为true时,返回结果才为true,只要有一个变量值为false,返回结果就为false。看下这个语句:字符串
c = a && b
变量
因此,把上面这个语句的Boolean()方法去掉,把a和b换成任意类型的变量,结果就很明显了。假设a为true,那么此时还没法决定c为true仍是false,要看b的值才能决定,因此此时b是决定性因素;假设a为false,那么此时已经能够肯定c为false,不用考虑b的值了,因此此时a是决定性因素。原理
或操做的原理和与操做相似,这里再也不说明。遍历
如今看下文章开头提到的那个语句,意思就是说若是a已经赋值(假设a是不为0的数),那么a的值不变,不然a=4。再往细了说,就是若是a已经赋值,那么Boolean(a)=true,或操做符右边的数就不看了,等式左边的a就等于右边的a;若是a没有复制,因为a已经声明,那么等式右边的a=undefined,Boolean(a)= false,这时看操做符右边,无论操做符右边的Bool值为何,如今等式左边的a就等于这个数了。方法
须要注意的是, 若是一个变量为声明,打印这个变量时,系统会报错;若是声明了一个变量但没有复制,打印这个变量时,系统会打印出‘undefined’这个字符串。所以,在与/或操做中,若是起决定性因素的那个变量没有声明,那么系统是会报错的。数据
实际应用中,或操做符会更经常使用些。通常用于插件替换原始值(参见Swiper.js),或者是DOM操做,例如:
var
length = length || $list.length
若是这个语句会执行屡次,那么从第二次开始,每次执行这个语句时,就不会再去遍历这个数组的长度了,由于长度已经存在length变量里面了。