我正在尝试通过更改和测试变量NODE_ENV
的值来实现我的代码在不同Node.js环境中正常工作的测试。
我坚持的是,试图理解为什么以下代码:
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
答案 0 :(得分:49)
非常微妙:根据the documentation:
在process.env上分配属性会隐式地将值转换为字符串。
所以你从"undefined"
而不是process.env.NODE_ENV
回来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 string undefined test string undefined process.env.NODE_ENV string undefined
答案 1 :(得分:0)
使 envs 为 undefined 的解决方法是将所有 envs 设置为 undefined 如下:
process.env = {}
或者如vitaly-t所说,删除这个环境:
delete process.env.NODE_ENV