【问题标题】:Why can I change a constant object in javascript? [duplicate]为什么我可以在 javascript 中更改常量对象? [复制]
【发布时间】:2021-06-04 12:25:38
【问题描述】:

假设“const”是恒定的,我不会想到这是可能的:

const obj = {
    key1: value1,
    key2: value2
};


obj["key3"] = value3;
obj.key4 = value4;

谁能给我解释一下?

【问题讨论】:

  • A const "variable" 是一个一旦创建就不能重新分配给另一个值的变量。通过改变对象,变量仍然持有相同的引用,所以变量没有改变。
  • 常量和不可变是两个不同的东西。你期望obj 是不可变的
  • 为什么我的问题被 4 次否决了?有没有人觉得自己聪明多了?
  • @gear 您的问题用一个很好的例子很好地阐述了,所以这不应该是反对票的原因。您的示例只有一个问题,即变量 value1 - value4 未定义。将它们更改为字符串可以解决此问题。但反对票的最可能原因可能是缺乏研究。如果您使用任何搜索引擎搜索“JavaScript 为什么我可以更改 const”,您可能会找到答案。我个人认为这个问题不值得投票,但我认为其他人可能不同意。

标签: javascript constants


【解决方案1】:

在您的情况下,您实际上并没有更改obj。您只是在更改 obj 的属性,因此不会认为您在尝试更改常量。

只有这样做才有问题:

const obj = {
    key1: value1,
    key2: value2
};

obj = 5

【讨论】:

  • 为什么会被否决?这是正确的答案。
  • @Pointy 我不知道。 ?
  • 小补充:如果要制作Objectconst的实际属性,请查看Object.freezedeveloper.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • @divillysausages 哦,我不知道!这太酷了。感谢您的补充。
  • 请注意,冻结对象是浅层的。如果对象包含嵌套对象,则它们不会被冻结。例如。 obj = { a: 1, b: { c: 2 } } 然后 obj.a = 3 导致错误,但仍然允许 obj.b.c = 3。 (只有obj 被冻结,obj.b 不是)
猜你喜欢
  • 1970-01-01
  • 2019-12-06
  • 2016-08-20
  • 2017-09-23
  • 2015-03-16
  • 1970-01-01
  • 2020-01-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多