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'
我对节点 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'