逻辑运算符短路的目的是为了优化执行
逻辑运算符: && || !
它们将按顺序将左侧的值转换为布尔类型,以决定做什么,在根据运算符及转换结果,返回原始的左侧值或右侧值
||的运算规则
- II运算符的左侧值为
true
,则直接返回左侧值; - ||运算符的左侧值为
false
,则直接返回右侧值。
console.log(null || "user");
// 返回 user
console.log("Agnes" || "user");
//返回Agnes
- 将字符串和数字转换为布尔值的规则规定:
0
、NaN
、undefined
、空字符串("")
计为false
;其他所有值都即为true
。特别注意对象函数、类等
是true
; - 执行优化:如果左侧的表达式为
true
,则直接返回左侧值,不执行右侧表达式;
0 || -1
// 返回-1
"" || "!?"
// 返回!?
undefined || 3
// 返回3
const c = (() => undefined) || (() => 1);
const d = c();
d;
// 返回undefined,因为对象是`true`,故c = () => undefined;
&&的运算规则(与||正好相反)
- &&运算符左侧值转换为
true
,则直接返回右侧的值; - &&运算符左侧值转换为
false
,则直接返回左侧的值; - 将字符串和数字转换为布尔值的规则规定:
0
、NaN
、undefined
、空字符串("")
计为false
;其他所有值都即为true
,特别注意对象函数、类等
是true
; - 执行优化: 如果左侧的表达式为
false
,则不会再执行右侧的表达式;
0 && -1
// 返回0
"" && "!?"
// 返回""
undefined && 3
// 返回 undefined
const c = (() => undefined) && (() => 1);
const d = c();
d;
// 返回1,因为对象是`true`,故c = () => 1;
网友评论