node.js process.env:将 process.env 属性分配给字符串类型的未定义结果?

新手上路,请多包涵

node.js process.env 对象处理属性分配的方式似乎与常规 JavaScript 对象不同。在这种情况下,如何让 process.env 对象像普通对象一样工作?

下面是说明不同赋值行为的示例代码。由于某种原因,将 undefined 分配给属性会导致字符串类型(仅适用于 process.env ):

 function demo(description, dict) {
    console.log(description);
    dict.A = undefined;
    console.log('typeof dict.A: ' + typeof dict.A + '\n');
}
demo('Passing empty object:', {});
demo('Passing process.env:',  process.env);

生成的输出是不同的,具体取决于传递的是空对象 {} 还是 process.env 对象:

$节点测试.js
传递空对象:
typeof dict.A: undefined

传递 process.env:
typeof dict.A: 字符串

原文由 Leftium 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 606
2 个回答

process.env 对象强制其所有属性为字符串类型,因为环境变量必须始终为字符串。我不完全确定你的目的,但也许你可以尝试其中一种作为解决方法:

  • process.env 对象复制到一个新对象中,该对象将正常运行:
   envCopy = {};
  for (e in process.env) envCopy[e] = process.env[e];

  • 如果您希望它为“空白”,则将 '' 分配给属性
  process.env.A = '';

当您将其视为布尔值时,它将返回 false

   if (process.env.A) {
      ...
  }

  • 或者正如 Jonathan Lonowski 指出的那样,您也可以 delete 来自 process.env 密钥
  delete process.env.A;

希望这可以帮助

原文由 LukeGT 发布,翻译遵循 CC BY-SA 3.0 许可协议

这是因为 process.env 将其所有值强制为 String

 process.env.A = undefined;
console.log(process.env.A);        // 'undefined' (note the quotes)

process.env.A = true;
console.log(process.env.A);        // 'true'
console.log(typeof process.env.A); // 'string'

如果您需要删除环境变量,则必须 delete 它:

 function demo(description, dict) {
    console.log(description);
    delete dict.A;
    console.log('typeof dict.A: ' + typeof dict.A + '\n');
}
demo('Passing process.env:', process.env);

// Passing process.env:
// typeof dict.A: undefined

原文由 Jonathan Lonowski 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题