91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

const和readonly有何區別

小樊
82
2024-10-12 17:08:19
欄目: 編程語言

constreadonly 在 JavaScript 中都用于聲明不可變的變量,但它們之間存在一些關鍵區別:

  1. 聲明方式const 用于聲明一個常量變量,其值在聲明時必須被賦值,且之后不能再次修改。而 readonly 用于聲明一個只讀的屬性,它可以用于聲明對象屬性或數組元素,其值在聲明時可以不被賦值,但之后也不能再次修改。
  2. 作用域const 聲明的變量具有塊級作用域,它只在聲明它的代碼塊內有效。而 readonly 聲明的屬性具有對象級作用域,它只在定義它的對象內有效。
  3. 賦值:對于 const 聲明的變量,其值在聲明時必須被賦值,且之后不能再次修改。而對于 readonly 聲明的屬性,其值在聲明時可以不被賦值,但之后也不能再次修改。需要注意的是,const 變量可以是對象或數組,但它們的屬性仍然是可變的。而 readonly 屬性必須是對象的屬性或數組的元素。

以下是一些示例代碼,以更好地理解 constreadonly 的區別:

// 使用 const 聲明一個常量變量
const pi = 3.14;
pi = 3.14159; // 報錯:TypeError: Assignment to constant variable.

// 使用 const 聲明一個具有塊級作用域的變量
if (true) {
  const message = "Hello, world!";
}
console.log(message); // 報錯:ReferenceError: message is not defined.

// 使用 readonly 聲明一個只讀的屬性
const obj = {
  name: "John",
  age: 30,
  readonly address: "123 Main St",
};
obj.address = "456 Elm St"; // 報錯:TypeError: Cannot assign to read only property 'address' of object 'obj'.

// 使用 readonly 聲明一個具有對象級作用域的屬性
const arr = [1, 2, 3];
Object.defineProperty(arr, "sum", {
  value: function () {
    return this.reduce((a, b) => a + b, 0);
  },
  writable: false, // 等同于 readonly
});
arr.sum = 6; // 報錯:TypeError: Cannot assign to read only property 'sum' of object '[1, 2, 3]'.

需要注意的是,constreadonly 不能互換使用。const 聲明的變量不能被重新賦值,但它的屬性仍然是可變的;而 readonly 聲明的屬性不能被重新賦值,也不能被刪除。

0
昭觉县| 岳阳县| 达日县| 余姚市| 东乡县| 池州市| 正蓝旗| 福海县| 庐江县| 乌苏市| 汾阳市| 长子县| 翼城县| 信丰县| 璧山县| 溆浦县| 兴宁市| 宜都市| 临邑县| 响水县| 延吉市| 东乌珠穆沁旗| 镇康县| 宝兴县| 曲水县| 合江县| 修水县| 青河县| 福鼎市| 永清县| 张家界市| 龙岩市| 衡山县| 明星| 芜湖县| 通江县| 西乌| 嘉荫县| 凤阳县| 义马市| 南澳县|