javascript - 为什么常量的属性或值不是常量

标签 javascript variables constants

node.js screenshot

我正在再次学习 JavaScript 基础知识,并想知道 JavaScript 在我的代码中实际如何应用。正如您在上面看到的,为什么常量的属性或值不是常量?有没有办法防止在将来的代码中编辑属性或值?

最佳答案

const 是什么意思?

如果使用 const 关键字声明变量,则意味着无法为其分配新值。这并不意味着您无法修改它。改变对象的属性就是修改。

解决方案

如果你不想改变一个对象,你可以使用 Object.freeze()

let someObj = {};
someObj.prop = 1; //setting prop to '1'

Object.freeze(someObj); //after this line you can't modify object
someObj.prop = "changed"; //prop will remain '1'
console.log(someObj)

注意: Object.freeze() 是浅卡住,意味着如果存在嵌套对象,它们仍然可以被修改。考虑下面的例子。

const obj = {
  upper:"something",
  nested:{
    nestProp:"this is nest prop"
  }
}
Object.freeze(obj);

obj.upper = 'new' //can't be changed
obj.nested.nestProp = 'new' //will be changed

console.log(obj)

现在这个问题可以使用递归来解决。

function completeFreeze(obj){
  Object.freeze(obj);
  for(let key in obj){
    if(typeof obj[key] === "object"){
      completeFreeze(obj[key])
    }
  }
}

const obj = {
      upper:"something",
      nested:{
        nestProp:"this is nest prop"
      }
}

completeFreeze(obj);

obj.nested.upper = 'new' //will not be changed

console.log(obj)

关于javascript - 为什么常量的属性或值不是常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56103006/

相关文章:

javascript - 将库声明为常量

php - "Notice: Undefined variable"、 "Notice: Undefined index"、 "Warning: Undefined array key"和 "Notice: Undefined offset"使用 PHP

sql - 在 Powershell 中将文件名中的值提取到变量中

C++ - 返回指针或常量引用

c++ - const 模板参数在创建后不保留 const-ness

javascript - JavaScript 中的 "throw new Warning"?

javascript - selenium IDE 不删除属性 "readonly"

java - Websocket 文件上传速度问题(Java websocket API 和 Javascript)

javascript - 如何将字符串解析为对象?

c - 这是在 C 中适当使用 const 限定符吗?