我在 JavaScript 中有一个 if 语句,问题(现在已修复,但我不知道为什么) 当参数 val1 和 val2 作为对象时,此代码有效:
if (typeof(val1) === typeof(val2) === 'object' && val1 !== null && val2 !== null)
但是这段代码可以:
if (typeof(val1) === 'object' && typeof(val2) === 'object' && val1 !== null && val2 !== null)
怎么样
typeof(val1) === 'object' && typeof(val2) === 'object'
不同于:
typeof(val1) === typeof(val2) === 'object'
我特意询问聊天gpt,这就是答案,它有效,但我想知道为什么
问题似乎出在比较的结构上。表达式 typeof(val1) === typeof(val2) === 'object' 无法按预期工作,因为它从左到右计算。相反,尝试像这样分解它:
if (typeof(val1) === 'object' && typeof(val2) === 'object' && val1 !== null && val2 !== null) {
由于运算符优先级和结合性
typeof(val1) === typeof(val2) === 'object'
相当于
(typeof(val1) === typeof(val2)) === 'object'
首先评估
typeof(val1) === typeof(val2)
,返回 true
或 false
。这些都不可能等于字符串 'object'
,因此整个条件始终为 false
。