&&和||的运算流程
&&和||进行布尔判定的逻辑图。
console.log(2 && 4) // 4
console.log(2 || 4) //2
根据图示,2和4都为true,但两个表达式返回的结果又不一样,这是因为
他们的返回值是确定结果的最后一个数据,&&先判断左边为真,在判断右边为真,两个都为真,返回第二次判定的数据4,|| 判断左边为真,有一个为真,则为真,所以他只进行了一次判定,返回2。
在开发中的应用
清楚了&&和||的运算流程,在来看一下他在企业开发中是如何应用的。
需求:请求一个对象,但不清楚对象里面有没有某属性,如果有则获取,没有赋一个默认的值。
var obj = {}
var a = obj.a || 'default'
console.log(a) //'default'
var obj = {a:123}
var a = obj.a || 'default'
console.log(a) //123
原理:
如果obj中有属性a,则判定为true,||符号一真为真,不需要进行其右边值的判断,直接返回最后一次判定的数据obj.a。
如果obj中没有属性a,则判定为false,||需要进行其右边值的判断,无论右边值为真假,都会返回最后一次判定的数据’default’。
需求:请求一个对象,但不清楚对象里面有没有某方法,如果有则调用。
var obj = {fn(){console.log('已被调用')}}
obj.fn && obj.func();
原理:
如果obj中有方法fn,则判定为true,但&&运算符有一个为真还不够,继续判断右边的值,就会调用右边的函数,返回他的运算结果。
如果obj中没有方法fn,则判定为false,&&运算符一假则假,就不会进行右边的运算,更不会调用这个函数。就达到了,有则调用,没有就不会调用。