javascript是否允许将现有变量转换为常量变量?

时间:2017-03-15 23:23:54

标签: javascript

我有一个特殊情况使用javascript。有一个由var myVar=xxx定义的变量。然后我想保护这个变量被其他代码更改。我知道我可以在开始时用const定义变量,但有一些原因我不能这样做。所以我正在寻找一种方法将现有变量转换为const变量。不确定是否可能。

3 个答案:

答案 0 :(得分:2)

您无法将var更改为const,但假设在全局对象上定义了myVar,您可以使用Object.defineProperty进行最终绑定:



var myVar = 'sacred-value'

Object.defineProperty(window, 'myVar', {
  writable: false,
  value: window.myVar
})

myVar = 'evil-value'

console.log(myVar) //=> 'sacred-value'




注意:我假设window对象是您的全局上下文,但如果您在非浏览器环境中执行,则可能需要使用global代替

答案 1 :(得分:0)

您无法将var更改为const

您可以将变量存储在对象中,对其进行变异,然后使用Object.freeze冻结对象以防止进一步的突变:



const variables = {
  a: 'b'
};

variables.a = 'c';
Object.freeze(variables);
variables.a = 'd'; // does nothing
console.log(variables.a);




答案 2 :(得分:0)

之后您无法更改变量声明的类型。但是,您可以引入一个新范围,将其声明为常量:

var myVar = "xxx"; // assuming global scope

{
    const myVar = window.myVar; // or `this.` or `global.` depending on your environment
    … // your code here that will throw on assigning to `myVar`
}