前端js之&&和||

不要百度和写代码测试
第一个问题，下面这两行代码的输出是什么

Copy
console.log(1<2 && 4>5)
console.log(1<2 || 4>5)

第二个问题，下面这两行代码的输出又是什么

Copy
console.log(2 && 4)
console.log(2 || 4)

如果说你对这样的问题不清楚的话，说明你对 && 和 || 的运算流程是不清楚的
它们的运算流程是什么呢
看下面这张图

比如说console.log(2 && 4)2 和 4 都是 true

Copy
console.log( 2 && 4 )
true && true

返回的结果是最后判定的那一个的数据，4 是后判定的，所以返回的是 4
验证一下

console.log(2 || 4)怎么算呢
也是先做判定，2 是 true，|| 运算只要一个为真就行，这样就不用判定后面的 4 了
因为返回的结果是最后判定的那一个的数据，所以返回的是 2
验证一下

那么在实际开发的时候怎么用呢

比如说我们这里有个对象
var obj = {}
假设它是从其它什么地方来的，你也不知道这对象里有哪些属性
我们现在要从这个对象里读一个属性 a
我的需求是如果 a 有值就读 a，如果没有值就给个默认值
正常写的话就会写成这样

Copy
var a = obj.a
if(!a) {
a='default'
}

用 || 写的话，只需要

Copy
var a = obj.a || 'default'

代码简洁许多
根据判定流程，obj.a 有值的话，返回是 true，返回的结果是最后判定的那一个的数据，所以 a = obj.a
obj.a 没有值的话，会继续判定后面的，'default' 返回是 true，所以 a = 'default'

再比如说，我们想知道 obj 里有没有一个函数，有的话就调用它
常规写法就是

Copy
if(obj.func) {
obj.func()
}

用 && 写的话就是

Copy
obj.func && obj.func()

这个大家可以自己想想