【问题标题】:Are there any drawbacks on using this kind of JavaScript code? [duplicate]使用这种 JavaScript 代码有什么缺点吗? [复制]
【发布时间】:2020-07-09 17:40:54
【问题描述】:

考虑以下 JavaScript 代码:

const myObject = {
   innerValue: 'test'
}

myObject.innerValue = 'I can still change this, this is not a constant';

如果我运行这段代码,我想浏览器不会输出任何错误,因为只有外部对象 myObject 是常量,而它的属性不是。但是这段 JavaScript 代码的有效性如何?我的意思是,写这样的东西有什么负面的缺点吗?

【问题讨论】:

  • Javascript是动态语言,这样写是没有问题的。
  • 不,这没有什么问题。这完全符合预期。您尚未更改 myObject 的值。

标签: javascript


【解决方案1】:

看起来您已经了解变量 myObject 是 const,但它所引用的对象不是。这在很大程度上是为 JavaScript 设计的。使用const 的方式不会保护你不修改对象。

您可以使用属性来保护innerValue 的值。

const myObject = {};
Object.defineProperty(myObject, 'innerValue', {
  value: 'test',
  writable: false
});

console.log(myObject.innerValue);
myObject.innerValue = 'this is not an error but will not change the value';
console.log(myObject.innerValue);

【讨论】:

  • writable 默认为false,因此无需显式设置。您应该在回答中提到使用 Object.defineProperty() 函数定义的属性默认情况下不可枚举、不可配置且不可写。
猜你喜欢
  • 2017-06-25
  • 1970-01-01
  • 2020-08-07
  • 2011-10-12
  • 2018-07-27
  • 2018-02-19
  • 1970-01-01
  • 2016-03-30
  • 2014-08-28
相关资源
最近更新 更多