Node js 三元运算符为什么比较出错?

Node js ternary operator why comparsion goes wrong?

我对节点 js 脚本中的三元运算符比较有疑问。 我有

function zip(fileName) {...}
process.env.TESTING = false;
zip(`${file}_${process.env.TESTING ? 'dev' : 'prod'}.zip`)

但是 fileName 总是 file_dev.zip 而不管 process.env.TESTING 值

console.log(process.env.TESTING); // false
console.log(process.env.TESTING ? 'dev' : 'prod'); // always 'dev'

为什么值为 boolean false 但比较结果总是 true

但浏览器控制台按预期工作

如果这个值来自环境,它的值不就是字符串 'false'吗?你能用 console.log(typeof process.env.TESTING) 确认它是一个布尔值吗?

如果结果是字符串,则应该将比较重写为process.env.TESTING == 'false' ? 'prod' : 'dev'

  process.env.VARIABLE

始终将值存储为字符串,因此 false 将是 'false' 而不是布尔值 false

process.env.VARIABLE === 'false'? 'prod':'dev'