legongju.com
我们一直在努力
2024-12-29 04:04 | 星期天

const和readonly有何区别

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 声明的属性不能被重新赋值,也不能被删除。

未经允许不得转载 » 本文链接:https://www.legongju.com/article/66778.html

相关推荐

  • const和readonly如何影响代码维护

    const和readonly如何影响代码维护

    const 和 readonly 都是用于声明变量的关键字,它们在代码维护方面有着重要的影响。
    const 关键字用于声明一个常量,即其值在初始化之后不能被修改。这意味...

  • const和readonly在多线程中安全吗

    const和readonly在多线程中安全吗

    const 和 readonly 关键字在 C++ 中用于定义常量,但它们在多线程环境中的安全性取决于它们的使用方式和上下文。 const:const 关键字用于声明一个不可变的对象或...

  • const和readonly怎样处理继承关系

    const和readonly怎样处理继承关系

    在处理继承关系时,const 和 readonly 关键字的使用取决于你想要如何限制子类对父类成员的访问。 const:当一个成员被声明为 const 时,它不能在子类中被重新赋值...

  • const和readonly在跨平台中表现一致吗

    const和readonly在跨平台中表现一致吗

    const 和 readonly 在不同编程语言和平台中的表现可能会有所差异,但它们的基本概念和用途是一致的。它们都用于声明不可变变量或对象属性。 const:const 关键字...

  • c#正则表达式如何处理嵌套结构

    c#正则表达式如何处理嵌套结构

    在C#中,处理正则表达式中的嵌套结构稍微复杂一些,因为C#的正则表达式引擎(System.Text.RegularExpressions.Regex)不支持递归匹配。但是,你可以使用一些技巧...

  • c#正则表达式怎样提高匹配准确率

    c#正则表达式怎样提高匹配准确率

    在C#中,提高正则表达式匹配准确率的技巧包括: 使用非贪婪匹配:默认情况下,正则表达式会尽可能多地匹配字符。通过在量词后添加?,可以使其变为非贪婪模式,从...

  • c#正则表达式在安全性方面怎样考虑

    c#正则表达式在安全性方面怎样考虑

    C#中的正则表达式在安全性方面主要需要考虑以下几个方面: 避免使用不安全的正则表达式方法:某些正则表达式方法可能会导致安全漏洞,例如Regex.Replace和Regex....

  • c#正则表达式如何应对文本多样性

    c#正则表达式如何应对文本多样性

    C#中的正则表达式在应对文本多样性时,可以通过以下几种方法来提高匹配的准确性和灵活性: 使用非贪婪匹配:默认情况下,正则表达式会尽可能多地匹配字符。通过在...