首先js 会将 && 和 || 两边的值转成Boolean 类型,然后再进行逻辑关系运算 。
&&运算如果返回true,则取后面的值,如果 || 返回true,则取前面的值。
var num = 44 && 55;
var num2 = 44 || 55;
console.log(num); // 55
console.log(num2); // 44
- 转换成boolean 的规则 :
- 对象、非零整数、非空字符串返回true
- 空字符串、null、undefined、NaN、false、0 ,返回false
短路原则:
var a = "" || null || 3 || 4;
相当于:
var a = false || false || true || true;
短路:第一个false,要去找下一个,第二个同是false,继续往下找。第三个是ture返回,不再检查第四。
结果为true 则返回第一个true,即是3
var b = 4 && 5 && null && 0;
相当于:
var b = true && true && false && false;
一个为假则为假。当找到第三个时为false,返回。
结果是false 则返回第一个false 即是null .
技巧:
- 检测是否定义,未定义则赋初始值。
// 判断一个变量是否存在,如果没有就给他一个初始值
var attr = attr || "";
function Foo(option) {
var defaultValue = option || {};
}
Foo();
- 利用返回值的特性:
function getType(arg) {
var num = (arg == 1 && '类型1') || (arg == 2 && '类型2') || 0;
return num;
}
console.log(getType(1))
优化:
var num = {‘5’:1,’10’:2,’12’:3,’15’:4}[per] || 0;
function getValue(arg) {
var num = {'5':1,'10':2,'12':3,'15':4}[arg] || 0;
return num;
}
console.log(getType(5))