不要百度和写代码测试
第一个问题,下面这两行代码的输出是什么
console.log(1<2 && 4>5)
console.log(1<2 || 4>5)
第二个问题,下面这两行代码的输出又是什么
console.log(2 && 4)
console.log(2 || 4)
如果说你对这样的问题不清楚的话,说明你对 && 和 || 的运算流程是不清楚的
它们的运算流程是什么呢
看下面这张图
比如说console.log(2 && 4)
2 和 4 都是 true
console.log( 2 && 4 )
true && true
返回的结果是最后判定的那一个的数据,4 是后判定的,所以返回的是 4
验证一下
console.log(2 || 4)
怎么算呢
也是先做判定,2 是 true,|| 运算只要一个为真就行,这样就不用判定后面的 4 了
因为返回的结果是最后判定的那一个的数据,所以返回的是 2
验证一下
那么在实际开发的时候怎么用呢
比如说我们这里有个对象
var obj = {}
假设它是从其它什么地方来的,你也不知道这对象里有哪些属性
我们现在要从这个对象里读一个属性 a
我的需求是如果 a 有值就读 a,如果没有值就给个默认值
正常写的话就会写成这样
var a = obj.a
if(!a) {
a='default'
}
用 || 写的话,只需要
var a = obj.a || 'default'
代码简洁许多
根据判定流程,obj.a 有值的话,返回是 true,返回的结果是最后判定的那一个的数据,所以 a = obj.a
obj.a 没有值的话,会继续判定后面的,'default' 返回是 true,所以 a = 'default'
再比如说,我们想知道 obj 里有没有一个函数,有的话就调用它
常规写法就是
if(obj.func) {
obj.func()
}
用 && 写的话就是
obj.func && obj.func()
这个大家可以自己想想