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为真,那么为什么不会DEMO && LOCAL
返回相同的值,如我之前的日志所示?
我刚发现LOCAL && DEMO
返回false。
LOCAL && DEMO === false
和`DEMO& LOCAL === true
答案 0 :(得分:4)
这是因为您从process.env中分配了一个字符串数据类型。
<svg height="100" width="100">
<circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="red" />
Sorry, your browser does not support inline SVG.
</svg>
将值转换为布尔值
答案 1 :(得分:1)
听起来DEMO和LOCAL是字符串而不是布尔值。请注意,console.log(false)和console.log(&#39; false&#39;)会产生完全相同的输出。
你应该避免使用&amp;&amp;运算符,直到你将它们解析为适当的布尔变量,例如:
const DEMO = process.env.DEMO == 'true';
const LOCAL = process.env.LOCAL == 'true';
const PORT = process.env.PORT;
然后继续你的三元运营商。