JavaScript中0/1和true / false之间有什么区别

时间:2019-04-17 05:07:27

标签: javascript reactjs environment-variables

最近,我正在尝试为我的应用程序完成一项功能。我需要使用布尔值来打开或关闭功能。

我尝试过:

.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,这是我尝试的方法:

comparing 0 is equal to true or not

1 个答案:

答案 0 :(得分:3)

一个猜测,因为在我使用过的每个操作系统中,“环境变量”总是 strings ,实际上,您要做的就是

if("0")

并且由于任何非空字符串都是真实的,而true是真实的,因此结果为true

您可以通过

确认

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是布尔值