为什么我不能将NODE_ENV设置为undefined ?

Why can't I set NODE_ENV to undefined?

本文关键字:设置 undefined ENV 不能 NODE 为什么      更新时间:2023-09-26

我正试图实现一个测试,我的代码在不同的Node.js环境中正确工作,通过改变和测试变量NODE_ENV的值。

我被困住了,试图理解为什么下面的代码:

process.env.NODE_ENV = undefined;
var test = process.env.NODE_ENV || 'empty';
console.log(test);

输出undefined而不是empty

是一些JavaScript或Node.js功能,我在这里错过了吗?

在Node.js版本:0.10.47,4.6.1和6.9.1下测试


更新

对于这种特殊情况,我必须做以下工作:

delete process.env.NODE_ENV; // now it is undefined

非常微妙:根据文档:

在进程上分配属性。Env将隐式地将值转换为字符串。

所以你从process.env.NODE_ENV得到"undefined",而不是undefined"undefined"为真,因此"undefined" || "empty""undefined"

你可以看到,如果你修改一下你的脚本:

'use strict';
process.env.NODE_ENV = undefined;
console.log("process.env.NODE_ENV", typeof process.env.NODE_ENV, process.env.NODE_ENV);
var test = process.env.NODE_ENV || 'empty';
console.log("test", typeof test, test);
console.log("process.env.NODE_ENV", typeof process.env.NODE_ENV, process.env.NODE_ENV);

…输出:

<>之前process.env。NODE_ENV字符串未定义测试字符串未定义process.env。NODE_ENV字符串未定义

将envs设置为undefined的解决方法是将所有envs设置为undefined,如下所示:

process.env = {}

或者如vital -t所说,删除这个环境:

delete process.env.NODE_ENV