首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么会发生这种来自&&运算符的矛盾行为?

为什么会发生这种来自&&运算符的矛盾行为?
EN

Stack Overflow用户
提问于 2018-01-12 15:46:51
回答 2查看 51关注 0票数 0
代码语言:javascript
复制
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

令人难以置信的是,这种情况并没有发生。

下面是我记录的一些东西,以及我在控制台中得到的东西。

代码语言:javascript
复制
`console.log('DEMO '+DEMO+' LOCAL '+LOCAL)`

在我的控制台中:DEMO false LOCAL true

非常正常

console.log('DEMO && LOCAL returns '+(DEMO && LOCAL))

在我的控制台中:DEMO && LOCAL returns true

不正常。这怎么可能呢?

代码语言:javascript
复制
`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 ===如何为真

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-12 15:51:04

这是因为您从process.env赋值,这是一个字符串数据类型。

代码语言:javascript
复制
console.log("false" && "true") //will print true.

将值转换为布尔值

票数 4
EN

Stack Overflow用户

发布于 2018-01-12 16:11:46

这听起来像是DEMO和LOCAL是字符串而不是布尔值。请注意,console.log(false)和console.log('false')产生的输出完全相同。

在将它们解析为适当的布尔变量之前,应避免对它们使用&&运算符,例如:

代码语言:javascript
复制
const DEMO = process.env.DEMO == 'true';
const LOCAL = process.env.LOCAL == 'true';
const PORT = process.env.PORT;

然后继续你的三元运算符。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48221723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档