今天碰见个题目,感觉短路表达式很好用。
题目:
定义一个计算圆面积的函数area_of_circle(),它有两个参数: r: 表示圆的半径; pi: 表示π的值,如果不传,则默认3.14 function area_of_circle(r, pi) { }
我的写法:
if(arguments.length>=2){return pi*r*r;}else if(arguments.length==1){return 3.14*r*r;}else return false;
别人写法:
return r*r*( arguments.length >= 2 ? pi : 3.14 );
大神写法:
return r * r * (pi || 3.14);
短路表达式知识补充:
1、逻辑与 && 的运算方式
var a = 1 && 2;console.log(a); //返回的结果为 2
如果逻辑与运算符左边的值布尔转换后为true,那么返回右边的值(不管右边的值是真还是假)。
var a = false && 2;console.log(a); //返回的结果为 false
如果逻辑与运算符左边的值布尔转换后为false,那么返回左边的值,但是当逻辑与的左边为 null/NaN/undefined ,结果就会得到null/NaN/undefined。
2、逻辑或 || 的运算方式
如果逻辑或运算符左边的值布尔转换后为false,那么返回右边的值(不管右边的值是真还是假)。
如果逻辑或运算符左边的值布尔转换后为true,那么返回左边的值,如果两个操作数都是是null(NaN/undefined),返回null(NaN/undefined)
var a = false || 2;console.log(a); //返回的结果为2var a = true || 2;console.log(a); //返回的结果为 true
3.短路表达式实际应用补充(2018-8-14)
(1)正则表达式
v => !v || /^([0-9]{7,18})|(0?(13|14|15|17|18|19)[0-9]{9})$/.test(v) || '格式错误',
前边为true则不再执行后边的,前边为false则继续往后执行。
(2)if的简化
vm.querySelObj[key] && (params[key] = vm.querySelObj[key]); 相当于 a&&(b=1);
a等于true则执行b=1,a=false则不执行b=1.用if写:if(a=true){b=1}