为什么node.js使用双问号表达式时工作得如此奇怪?

ix0qys7i  于 2023-08-04  发布在  Node.js
关注(0)|答案(1)|浏览(136)
const a: string = 'asd'
const b: string = 'ddd'
const test = a ?? b === 'daa' ? 'ccc' : null

字符串
我有下面的JS代码。出于某种原因,test在这个表达式中等于'ccc',但这是怎么回事呢?这怎么可能。根据逻辑,test应该等于'asd',因为我们使用双问号来检查a是否等于undefined或null,但它不是,所以我们应该从a中获取值。
我们在我的工作中有这个代码,我被分配了一个任务来修复这个bug。但我不明白这个bug是怎么发生的。Env:typescript,ts-node,node 18.12.1

noj0wjuj

noj0wjuj1#

这是一个运算符优先级问题。三元运算符的优先级很低,因此表达式被解析为:

const test = (a ?? (b === 'daa')) ? 'ccc' : null

字符串
由于括号中的结果为真值,因此结果将为“ccc”。最好使用额外的括号来澄清三进制表达式。

const test = a ?? (b === 'daa' ? 'ccc' : null)

相关问题