node.js process.env:将process.env属性赋值给未定义的stringtypes的结果?

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

以下是说明不同分配行为的示例代码。 出于某种原因,将undefined的属性赋值给一个stringtypes(仅限于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对象而有所不同:

 $ node test.js
传递空对象:
 typeof dict.A:未定义

通过process.env:
 typeof dict.A:string

process.env对象强制其所有属性都是stringtypes,因为环境variables必须始终是string。 我不完全确定你的目的,但也许你可以尝试其中之一作为解决方法:

  • process.env对象复制到一个新的对象中,然后该对象将正常工作:

     envCopy = {}; for (e in process.env) envCopy[e] = process.env[e]; 
  • 如果你希望它是'空白',则将''分配给属性,

     process.env.A = ''; 

    当你把它当作布尔值时,它会返回false

     if (process.env.A) { ... } 
  • 或者Jonathan Lonowski指出,你也可以从process.env delete密钥

     delete process.env.A; 

希望这可以帮助

这是因为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' 

如果您需要删除环境variables,则必须将其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