JavaScript中只读属性的定义是什么?这是什么意思?

What is the definition of a read-only property in JavaScript? What does it mean?

我对只读 属性 的含义有点困惑?我知道 classList 根据 MDN 的定义是只读的 属性 但这到底是什么意思?

一个只读的属性意味着它不能被覆盖或分配给。在非严格模式下,任何此类赋值都将默默地不执行任何操作。例如:

var obj = {};
Object.defineProperty(obj, 'property', {value: 123, writeable: false})


// Assign 456 to obj.property using the . syntax, but it's still 123
obj.property = 456;
console.log(obj.property);

// Assign 789 to obj.property using the [] syntax, but it's still 123
obj['property'] = 789;
console.log(obj['property']);

或者在严格的 mide 中使用 TypeError 出错:

'use strict';

var obj = {};
Object.defineProperty(obj, 'property', {value: 123, writeable: false})


// Assign 456 to obj.property in strict mode will result in a TypeError
obj.property = 456;
console.log(obj.property);

当 属性 是只读的时,属性 被认为是“不可写的”。无法重新分配。

例如,您无法更新元素的 classList 属性 或为其赋值,但您可以读取它。

供参考:

  1. Objects — Writable, Configurable & Enumerable
  2. JavaScript Object Accessors

除了@Mureinik所说的之外,还有另一种方法可以使对象处于只读模式 它叫做 freeze 你可以像这个例子一样使用它

let myObj = {id: 45, title: 'title here'}

Object.freeze(myObj);

myObj.title = 'update title' // this wouldn't updates

console.log(myObj)

// incase if you want to rewrite this object after freezing it
// you need to re-assign all of its values like this 
myObj = {id: myObj.id, title: 'Another title here'}

console.log(myObj)

您可以在 mdn 文档中阅读有关 Object.freeze() and the right way to update it 的内容