【问题标题】:What is the difference between 0/1 and true/false in JavaScriptJavaScript中的0/1和真/假有什么区别
【发布时间】:2019-09-07 06:31:42
【问题描述】:

最近我试图为我的应用完成一项功能。我需要使用布尔值来打开或关闭功能。

我试过了:

.env.development

REACT_APP_IS_FEATURE_AVAILABLE = 0

.env.production

REACT_APP_IS_FEATURE_AVAILABLE = 1

features.js

const { REACT_APP_IS_FEATURE_AVAILABLE } = process.env
export default {
    IS_FEATURE_AVAILABLE: REACT_APP_IS_FEATURE_AVAILABLE //
}

现在假设它处于开发模式,当我这样做时:

index.js

import Features from "./features.js";
if(Features.IS_FEATURE_AVAILABLE) {
    return (<div>Markup here!</div>)
};

但是,无论IS_FEATURE_AVAILABLE 的值是多少,if 总是在传递。

我确实想出了一个解决办法,而且效果很好。但我仍然很困惑为什么这不起作用。


针对这个答案:https://stackoverflow.com/a/55720488/8349557 这是我尝试过的:

【问题讨论】:

  • Features.IS_FEATURE_AVAILABLE怎么样?
  • @DhavalMarthak 打错了.. 只做Features.IS_FEATURE_AVAILABLE
  • 是的,我忘记了"0" == true 这两个值似乎都被强制转换为数字......所以它变成了0 == 1 - 这是错误的......但"0" 仍然是真实的...... @ 987654335@ 为真,而!!0 为假
  • @JaromandaX 您能否更新您的答案,我会将其标记为正确。 :D
  • 我已经删除了"0" == true 错误:p

标签: javascript reactjs environment-variables


【解决方案1】:

猜测一下,因为我使用过的每个操作系统中的“环境变量”总是字符串你实际上在做的是

if("0")

而且由于任何非空字符串都是真的,真为真,结果为真

您可以通过

来确认

console.log('!!"0" is', !!"0"); // true, therefore "0" is truthy
console.log('!!0 is', !!0); // false, therefore 0 is falsey

试试

const { REACT_APP_IS_FEATURE_AVAILABLE } = process.env
export default {
    IS_FEATURE_AVAILABLE: +REACT_APP_IS_FEATURE_AVAILABLE //
}

+ 将值强制为数字

或者,让它变得清晰

const { REACT_APP_IS_FEATURE_AVAILABLE } = process.env
export default {
    IS_FEATURE_AVAILABLE: "1" === REACT_APP_IS_FEATURE_AVAILABLE //
}

现在 IS_FEATURE_AVAILABLE 是一个布尔值

【讨论】:

  • 终于!一个可能有意义的答案!起初我是这么想的。但是当我这样做时,"0" === true 在(浏览器的)控制台中,它返回false。为什么会这样?
  • @AjayGupta - ===strict 等于...所以"0" === "0" 因为它们完全相等...但"0" 与@ 不同987654331@ ... 但是"0" == true 因为它们都是“真实的” ... if("0") 相当于if("0" == true) 而不是if("0"===true)
  • 哈哈!这越来越有趣了:D
  • 但是"0" 是真实的...!!"0"!!0 - 我认为当你比较"0" == true 时一定会有一些强制发生......啊,是的......真的被强制转换为1 :p ... 所以"0" == true 似乎变成了0 == 1
  • 完全有道理.. 谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-04
  • 1970-01-01
  • 2011-12-24
  • 2011-09-22
  • 1970-01-01
  • 2011-10-31
  • 2010-10-15
相关资源
最近更新 更多