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

时间:2012-04-22 04:25:31

标签: javascript node.js

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对象:

$ node test.js
Passing empty object:
typeof dict.A: undefined

Passing process.env:
typeof dict.A: string

2 个答案:

答案 0 :(得分:30)

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

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

    envCopy = {};
    for (e in process.env) envCopy[e] = process.env[e];
    
  • 如果您希望将''设为“空白”

    ,请将process.env.A = ''; 分配给该属性
    if (process.env.A) {
        ...
    }
    

    当您将其视为布尔值

    时,将返回false
    delete
  • 或者 Jonathan Lonowski 指出,您还可以process.env来自delete process.env.A;

    的密钥
    {{1}}

希望这有帮助

答案 1 :(得分:12)

这种情况正在发生,因为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