Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么在process.env上定义属性会导致奇怪的条件分支?_Javascript_Node.js - Fatal编程技术网

Javascript 为什么在process.env上定义属性会导致奇怪的条件分支?

Javascript 为什么在process.env上定义属性会导致奇怪的条件分支?,javascript,node.js,Javascript,Node.js,我正在测试一些代码,这些代码根据环境做不同的事情。我认为我可以在测试中修改process.env上的属性(尽管我认为这可能是个坏主意),但我意识到我得到了一个非常奇怪的行为: let foo = function(inp) { if (inp) { console.log(inp + ' -> if') } else { console.log(inp + ' -> else') } } // property starts undefined foo(

我正在测试一些代码,这些代码根据环境做不同的事情。我认为我可以在测试中修改
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,演示如下:)

还有其他人经历过吗?我真的希望了解为什么会发生这种情况,而不仅仅是我的测试解决方案。

道具是字符串。从

在process.env上指定属性将隐式地将值转换为字符串。此行为不受欢迎。如果值不是字符串、数字或布尔值,Node.js的未来版本可能会引发错误

您的
false
将转换为
'false'
,该字符串为“truthy”,因为它是长度为5的有效字符串。与关键字
未定义
相同。您的
删除
是合法的。我不确定哪一部分是不推荐的,但您描述的行为看起来像是在按预期工作。

道具是字符串。从

在process.env上指定属性将隐式地将值转换为字符串。此行为不受欢迎。如果值不是字符串、数字或布尔值,Node.js的未来版本可能会引发错误


您的
false
将转换为
'false'
,该字符串为“truthy”,因为它是长度为5的有效字符串。与关键字
未定义
相同。您的
删除
是合法的。我不确定哪一部分是不推荐的,但您描述的行为看起来像预期的那样工作。

我认为这是因为错误的价值观。我认为这是因为错误的价值观。非常感谢!因此,看起来我可以通过为属性分配一个空字符串来获得一个falsy值(我需要这个值)。非常感谢!因此,看起来我可以通过给属性分配一个空字符串来获得一个falsy值(我需要这个值)。