短路运算 &&和||
一、逻辑运算符 &&(短路与)
特点:只要碰到了false或者等价于false的就短路,只要短路了就不会继续往后执行了。如果短路了,得到造成短路的这个值,如果不短路,得到的是第二个值
console.log( true && true ); // true console.log( 123 && '中国'); // 中国 console.log( false && true ); // false console.log( true && false); // false console.log(1 && 0); // 0 console.log( undefined && 0); // undefined console.log(null && 1); // null
二、逻辑运算符 ||(短路或)
特点:只要碰到了true或者等价于true的就短路,只要短路了就不会继续往后执行了。如果短路了,得到造成短路的这个值,如果不短路,得到的是第二个值
console.log( true || true ); // true console.log( 123 || '中国'); // 123 console.log( false || true ); // true console.log( true || false); // true console.log(1 || 0); // 1 console.log( undefined || 0); // 0 console.log(null || 1); // 1
需要注意的是:&& 和 || 的结果不一定是布尔类型,短路或一般用于设置函数的默认参数
之前记录的一段:
注意&&短路逻辑的用法
逻辑与是一种短路逻辑,如果左侧表达式为 false,则直接短路返回结果,不再运算右侧表达式。运算逻辑如下:
- 第 1 步:计算第一个操作数(左侧表达式)的值。
- 第 2 步:检测第一个操作数的值。如果左侧表达式的值可转换为 false(如 null、undefined、NaN、0、""、false),那么就会结束运算,直接返回第一个操作数的值。
- 第 3 步:如果第一个操作数可以转换为 true,则计算第二个操作数(右侧表达式)的值。
- 第 4 步:返回第二个操作数的值。
var user; //定义变量 (!user && console.log("没有赋值")); //返回提示信息“没有赋值”
等效于:
var user; //定义变量 if (!user){ //条件判断 console.log("变量没有赋值"); }