了解JS中的const

前言

在ES6中声明变量可用let也可以使用const,只不过后者声明的是一个内存地址值为不可改变的对象。

基本用法

先来看如下代码感受一下const的使用:
在这里插入图片描述
上面代码表明改变常量的值会报错,一旦在代码里使用const声明的简单类型的数据(数值、字符串、布尔值)其值就不可改变,这有点像Java中final 修饰的基本类型变量为常量。需要注意的是constlet一样只在声明的块级作用域有效。

        {
            const b =123;
        }
        //  Uncaught ReferenceError: b is not defined
        console.log(b)

当使用const声明一个对象和数组时后,此变量的引用便不可修改,但是此变量内部属性还是可以进行修改的。
在这里插入图片描述
定义一个对象person
在这里插入图片描述
控制台输出结果:
在这里插入图片描述
我们在定义一个数组对象:
在这里插入图片描述
控制台输出效果:
在这里插入图片描述
上面代码中,使用const定义的变量保存的是一个地址值,这个地址指向一个对象引用。const保证这个地址值是不可变的,但对象本身是可变的,所以可以变更这个对象内部的属性。

<think>嗯,用户想了解JavaScriptconst关键字的用法和特性。首先,我需要回顾一下const的基本定义。const用于声明一个常量,但要注意的是,这个常量指的是变量名绑定不可变,而不是值不可变。也就是说,如果用const声明一个对象,虽然不能重新赋值给这个变量,但可以修改对象的属性。 接下来,我得整理const的主要特性。比如,块级作用域,这和let一样,与var不同。声明时必须初始化,否则会报错。还有暂时性死区的问题,不能在声明前使用变量。这些点都很重要,需要详细说明。 然后,要对比const和let、var的区别。比如,var有变量提升,而const没有;var是函数作用域,const是块级作用域。这些对比能帮助用户更好理解不同关键字的使用场景。 应用场景方面,可以提到配置项、函数默认参数、模块导出等需要固定引用的地方。同时,要提醒用户,虽然const声明的变量不能重新赋值,但如果值是对象或数组,内部的值还是可以修改的。这时候可能需要结合Object.freeze来进一步冻结对象。 可能用户还会关心const在循环中的使用,比如在for...of或for...in循环中,每次迭代都会创建一个新的绑定,这跟var不同。需要举例子说明,比如循环中使用const声明变量,不会导致重复声明错误。 另外,用户提到的引用资料中,引用了JavaScriptconst的解析和C语言的const用法,虽然C语言的部分可能不直接相关,但可以简要提一下两者的区别,避免混淆。比如,C中的const更严格,而JavaScript中的const更灵活。 最后,要确保回答覆盖了常见问题,比如如何修改const声明的对象属性,为什么可以push数组元素等。通过代码示例来演示这些情况,帮助用户直观理解。 需要检查是否遗漏了重要点,比如变量提升、块级作用域、声明时必须初始化等。同时,确保回答结构清晰,分点列出,便于阅读。可能还需要添加相关问题,帮助用户进一步学习,比如与let的区别、使用场景等。 总结下来,回答应包括基本概念、特性、与let/var的区别、应用场景、注意事项以及常见问题示例。确保引用相关参考资料,并在适当位置添加引用标识,比如关于变量提升和块级作用域的部分引用已有的资料。</think>### JavaScriptconst关键字的用法及特性解析 #### 一、基本概念 `const`用于声明一个**不可重新赋值**的常量。其核心特性是: 1. **绑定不可变**:变量名与内存地址的绑定关系固定,无法修改[^2]。 2. **块级作用域**:与`let`类似,仅在当前代码块内有效。 3. **声明时必须初始化**:必须直接赋值,否则报错。例如: ```javascript const PI = 3.14; // 正确 const NAME; // 报错:Missing initializer ``` #### 二、主要特性 1. **允许修改对象或数组内容** ```javascript const person = { name: "Alice" }; person.name = "Bob"; // 允许修改属性 person = {}; // 报错:Assignment to constant variable ``` 即使`person`是常量,仍可修改其属性,因为`const`限制的是变量指向的内存地址,而非内容[^1]。 2. **暂时性死区(TDZ)** 与`let`类似,在声明前访问会触发错误: ```javascript console.log(VALUE); // 报错:Cannot access before initialization const VALUE = 10; ``` 3. **不可重复声明** 同一作用域内无法重复定义同名常量: ```javascript const x = 1; const x = 2; // 报错:Identifier 'x' has already been declared ``` #### 三、与`let`和`var`的对比 | 特性 | `const` | `let` | `var` | |----------
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值