我正在尝试测试一些根据环境执行不同操作的代码。我认为我也许能够在测试中修改 process.env
的属性(尽管我认为这可能是一个坏主意),但我意识到我得到了这个非常奇怪的行为:
let foo = function(inp) {
if (inp) {
console.log(inp + ' -> if')
} else {
console.log(inp + ' -> else')
}
}
// property starts undefined
foo(process.env.prop)
// undefined -> else
process.env.prop = true
foo(process.env.prop)
// true -> if
process.env.prop = false
foo(process.env.prop)
// false -> if !!!
process.env.prop = undefined
foo(process.env.prop)
// undefined -> if !!!
delete(process.env.prop)
foo(process.env.prop)
// undefined -> else
我预计设置 process.env.prop = false
会导致 else
分支执行,而不是 if
分支。如果我在新对象上使用属性,我确实会得到我期望的行为(链接到 REPL 演示这一点: https://repl.it/@JustinKulikausk/TechnologicalThickMuse )。
还有其他人经历过这种情况吗?我真的希望能够深入了解为什么会发生这种情况,而不仅仅是我的测试的解决方法。
最佳答案
Prop 是字符串。来自 the docs (v10.4.1)
Assigning a property on process.env will implicitly convert the value to a string. This behavior is deprecated. Future versions of Node.js may throw an error when the value is not a string, number, or boolean.
您的 false
会转换为 'false'
,这是“truthy”,因为它是长度为 5 的有效字符串。与关键字 undefined
相同>。您的删除
是合法的。我不确定哪一部分已被弃用,但您描述的行为看起来像预期的那样工作。
关于javascript - 为什么在 process.env 上定义属性会导致奇怪的条件分支?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50847559/