const {DEMO, PORT, LOCAL} = process.env;
const socketAddress = (DEMO & LOCAL)? `http://${hostname}:${PORT}`: `wss://${hostname}`;DEMO为false,PORT未定义,LOCAL为true
主机名为http://9f9cbf19.ngrok.io
我通过console.log仔细检查了所有的值
因为是(DEMO && LOCAL) === (false && true) === false,所以第二个表达式wss://${hostname}应该赋给socketAddress。
令人难以置信的是,这种情况并没有发生。
下面是我记录的一些东西,以及我在控制台中得到的东西。
`console.log('DEMO '+DEMO+' LOCAL '+LOCAL)`在我的控制台中:DEMO false LOCAL true
非常正常
console.log('DEMO && LOCAL returns '+(DEMO && LOCAL))
在我的控制台中:DEMO && LOCAL returns true
不正常。这怎么可能呢?
`console.log('false && true returns '+(false&&true))`在我的控制台中:false && true returns false
完全正常..。那么,如果DEMO为false而LOCAL为true,为什么DEMO && LOCAL不返回相同的值,如我之前的日志所示?
我刚刚发现LOCAL && DEMO返回false。
LOCAL && DEMO === false和` `DEMO & LOCAL ===如何为真
发布于 2018-01-12 15:51:04
这是因为您从process.env赋值,这是一个字符串数据类型。
console.log("false" && "true") //will print true.将值转换为布尔值
发布于 2018-01-12 16:11:46
这听起来像是DEMO和LOCAL是字符串而不是布尔值。请注意,console.log(false)和console.log('false')产生的输出完全相同。
在将它们解析为适当的布尔变量之前,应避免对它们使用&&运算符,例如:
const DEMO = process.env.DEMO == 'true';
const LOCAL = process.env.LOCAL == 'true';
const PORT = process.env.PORT;然后继续你的三元运算符。
https://stackoverflow.com/questions/48221723
复制相似问题