15

node.jsprocess.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
空のオブジェクトを渡す:
typeof dict.A:未定義

process.envを渡す:
typeof dict.A:文字列
4

2 に答える 2

42

process.env環境変数は常に文字列である必要があるため、オブジェクトはすべてのプロパティを文字列型にするように強制します。私はあなたの目的について完全にはわかりませんが、回避策としてこれらのいずれかを試すことができます:

  • process.envオブジェクトを新しいオブジェクトにコピーします。新しいオブジェクトは通常どおりに動作します。

    envCopy = {};
    for (e in process.env) envCopy[e] = process.env[e];
    
  • '''空白'にしたい場合は、代わりにプロパティに割り当てます

    process.env.A = '';
    

    ブール値として扱うとfalseが返されます

    if (process.env.A) {
        ...
    }
    
  • または、ジョナサン・ロノウスキーが指摘しているようにdeleteprocess.env

    delete process.env.A;
    

お役に立てれば

于 2012-04-22T04:39:07.300 に答える
13

これは、すべての値を次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
于 2012-04-22T04:40:50.123 に答える