如何保护全局变量以在 Node.js 中被覆盖

How to protect globals variables for beeing overridden in Node.js?

本文关键字:Node js 覆盖 全局变量 何保护 保护      更新时间:2023-09-26

我想知道是否有任何方法可以确保某些变量不会在 Node.js 程序中被错误覆盖。

由于不可能像

在 Java 中那样final设置 var,因此我认为没有任何方法可以确保全局的稳定性,该全局可以从任何地方(甚至从 EJS 等模板文件)覆盖。

非回归测试、代码审查、包的使用等是检测或避免此类错误的一些方法,但我想知道是否可以在 Node 中使用更强大的东西。

您可以创建不可写或冻结的对象

var obj = {
    test : 'test'
}
Object.freeze(obj);
obj.test = 'something else';
console.log(obj.test); // still "test"

据我所知,没有办法锁定变量,只有对象的属性

除了 else node 提到的Object.freeze之外.js还应该支持 const 关键字,至少在启用 es6 的情况下运行时是这样。不过,这适用于块范围的变量,而不是属性。

或者,Object.defineProperty可用于定义不可写、不可配置的属性。这也适用于模块或全局对象,尽管我自己还没有测试过。