JavaScript中两种对象类型判断表达式的差异原因解析
为什么
typeof(val1) === typeof(val2) === 'object'和typeof(val1) === 'object' && typeof(val2) === 'object'结果不同? 核心原因是JavaScript中相等运算符===的左结合特性,导致两个表达式的运算逻辑完全不一样:
先看
typeof(val1) === typeof(val2) === 'object'的运算过程:- 因为
===是左结合的,JS引擎会先计算左侧的typeof(val1) === typeof(val2),得到一个布尔值(true或false)。 - 接着用这个布尔值和字符串
'object'做===比较,而布尔类型和字符串类型属于不同类型,结果必然是false——哪怕val1和val2都是对象,这一步也会返回false。
- 因为
再看
typeof(val1) === 'object' && typeof(val2) === 'object'的运算逻辑:- 逻辑与
&&会先判断第一个条件typeof(val1) === 'object',若为true,再判断第二个条件typeof(val2) === 'object'。 - 只有当两个条件都为
true时,整个表达式才返回true,这才是正确判断两个值类型均为对象的写法。
- 逻辑与
举个实际例子:假设val1 = {},val2 = {}
- 第一个表达式运算步骤:
typeof(val1) === typeof(val2)→'object' === 'object'→true;接着true === 'object'→false。 - 第二个表达式运算步骤:
typeof(val1) === 'object'→true;typeof(val2) === 'object'→true;true && true→true。
内容的提问来源于stack exchange,提问作者Sid Ahmed
相关产品推荐
相关产品推荐

