ES6中const常量的核心特性与使用规范

作者:半夏

时间:2026-10-24

浏览:143

本文详细解析ES6中const关键字的核心特性,包括常量标识、块级作用域、无变量提升及暂时性死区(TDZ)机制。同时探讨const对引用类型对象的限制,介绍Object.freeze()及深冻结的实现方法,帮助开发者规范使用常量并避免常见错误。

文章目录

在ES6标准中,const用于声明一个只读的常量标识。与var不同,const定义的变量一旦赋值,其引用地址便不可更改,这为代码提供了更强的稳定性与可读性保障。

使用const声明的变量严禁进行重复声明或重新赋值。若尝试对已声明的常量再次赋值,或者在相同作用域内重复声明同名变量,JavaScript引擎将直接抛出ReferenceError或SyntaxError异常,从而在早期阶段捕获潜在错误。

const args='kenneth'
const args="kenneth"

在ES6标准中,const用于声明一个只读的常量标识。与var不同,const定义的变量一旦赋值,其引用地址便不可更改,这为代码提供了更强的稳定性与可读性保障。

在ES5环境中,开发者通常通过Object.defineProperty方法来实现类似常量的效果。具体做法是将对象的属性描述符中的writable设置为false,并配合value属性指定初始值,以此防止外部修改该属性值。

Object.defineProperty(window,"args",{
value: ' this is es5',
writable: false
})

const声明引入了块级作用域的概念。这意味着使用const定义的变量仅在其所在的代码块(如if语句、for循环或大括号包裹的代码段)内部有效。一旦离开该代码块,变量即被销毁,不会污染外部作用域。

if(true){
const args=123
}
console.log(args)

在ES6标准中,const用于声明一个只读的常量标识。与var不同,const定义的变量一旦赋值,其引用地址便不可更改,这为代码提供了更强的稳定性与可读性保障。

与var存在变量提升现象不同,const声明的变量不存在变量提升。这意味着在代码执行到const声明语句之前,该变量是不可访问的。这种设计避免了因提前访问未初始化变量而导致的逻辑混乱。

console.log(args)
const args=1

在ES6标准中,const用于声明一个只读的常量标识。与var不同,const定义的变量一旦赋值,其引用地址便不可更改,这为代码提供了更强的稳定性与可读性保障。

var args=123
console.log(window.args)      //123

cosnt  args1=456
console.log(window.args1)    //cosnt不在window中

由于const不存在变量提升,因此在声明语句之前的代码区域被称为“暂时性死区”(Temporal Dead Zone, TDZ)。在TDZ内尝试访问该变量,即使变量名相同,也会触发引用错误,确保变量在初始化前处于受保护状态。

if(true){
console.log(infor)
const infor=123
}

当代码试图在暂时性死区内访问const声明的变量时,JavaScript引擎会抛出专属的错误信息,明确提示变量尚未初始化。这一机制强制开发者必须严格遵循先声明后使用的编程规范。

在ES6标准中,const用于声明一个只读的常量标识。与var不同,const定义的变量一旦赋值,其引用地址便不可更改,这为代码提供了更强的稳定性与可读性保障。

在实际开发中,建议优先使用const声明变量,仅在确知需要重新赋值的情况下才使用let。这种最佳实践有助于减少副作用,提高代码的可维护性,并清晰地表达变量的生命周期意图。

const obj={
 id:1,
 age:18,
 name:'aaa'
}
obj.age=19       // cosnt 创建一个对象,对象中的属性可以被改变
//解决:冻结对象,一个被冻结的对象再也不能被修改
Object.freeze()
const obj2={
 id:2,
 name:'bbb',
 age:20,
 food:['banana','apple']
}
Object.freeze(obj2)
obj2.age=21                 //被Object.freeze()冻结后,不可以改变    
obj2.foods[1]='pear'        //可以改变  freeze只能冻结根层 嵌套引用类型需要嵌套递归

//实现创建引用类型:
    function deepFreeze(obj) {
            Object.freeze(obj);
            (Object.keys(obj) || []).forEach((key) => {
                let innerObj = obj[key]
                if (typeof innerObj === 'object') {
                    deepFreeze(innerObj);
                }
            }
            )
        }

        const tempObj = {
            id: 23,
            name: '1',
            food: ['banana', 'apple']
        }
        deepFreeze(tempObj)

综上所述,const不仅是一个声明关键字,更是ES6规范中保障代码质量的重要工具。通过理解其作用域、死区机制及对象冻结特性,开发者可以编写出更健壮、更可预测的JavaScript代码。

本文就到这里了,希望能够给你带来帮助,也希望您能够多多关注本站的更多内容!

在ES6标准中,const用于声明一个只读的常量标识。与var不同,const定义的变量一旦赋值,其引用地址便不可更改,这为代码提供了更强的稳定性与可读性保障。

使用const声明的变量严禁进行重复声明或重新赋值。若尝试对已声明的常量再次赋值,或者在相同作用域内重复声明同名变量,JavaScript引擎将直接抛出ReferenceError或SyntaxError异常,从而在早期阶段捕获潜在错误。

const args='kenneth'
const args="kenneth"

在ES6标准中,const用于声明一个只读的常量标识。与var不同,const定义的变量一旦赋值,其引用地址便不可更改,这为代码提供了更强的稳定性与可读性保障。

在ES5环境中,开发者通常通过Object.defineProperty方法来实现类似常量的效果。具体做法是将对象的属性描述符中的writable设置为false,并配合value属性指定初始值,以此防止外部修改该属性值。

Object.defineProperty(window,"args",{
value: ' this is es5',
writable: false
})

const声明引入了块级作用域的概念。这意味着使用const定义的变量仅在其所在的代码块(如if语句、for循环或大括号包裹的代码段)内部有效。一旦离开该代码块,变量即被销毁,不会污染外部作用域。

if(true){
const args=123
}
console.log(args)

在ES6标准中,const用于声明一个只读的常量标识。与var不同,const定义的变量一旦赋值,其引用地址便不可更改,这为代码提供了更强的稳定性与可读性保障。

与var存在变量提升现象不同,const声明的变量不存在变量提升。这意味着在代码执行到const声明语句之前,该变量是不可访问的。这种设计避免了因提前访问未初始化变量而导致的逻辑混乱。

console.log(args)
const args=1

在ES6标准中,const用于声明一个只读的常量标识。与var不同,const定义的变量一旦赋值,其引用地址便不可更改,这为代码提供了更强的稳定性与可读性保障。

var args=123
console.log(window.args)      //123

cosnt  args1=456
console.log(window.args1)    //cosnt不在window中

由于const不存在变量提升,因此在声明语句之前的代码区域被称为“暂时性死区”(Temporal Dead Zone, TDZ)。在TDZ内尝试访问该变量,即使变量名相同,也会触发引用错误,确保变量在初始化前处于受保护状态。

if(true){
console.log(infor)
const infor=123
}

当代码试图在暂时性死区内访问const声明的变量时,JavaScript引擎会抛出专属的错误信息,明确提示变量尚未初始化。这一机制强制开发者必须严格遵循先声明后使用的编程规范。

在ES6标准中,const用于声明一个只读的常量标识。与var不同,const定义的变量一旦赋值,其引用地址便不可更改,这为代码提供了更强的稳定性与可读性保障。

在实际开发中,建议优先使用const声明变量,仅在确知需要重新赋值的情况下才使用let。这种最佳实践有助于减少副作用,提高代码的可维护性,并清晰地表达变量的生命周期意图。

const obj={
 id:1,
 age:18,
 name:'aaa'
}
obj.age=19       // cosnt 创建一个对象,对象中的属性可以被改变
//解决:冻结对象,一个被冻结的对象再也不能被修改
Object.freeze()
const obj2={
 id:2,
 name:'bbb',
 age:20,
 food:['banana','apple']
}
Object.freeze(obj2)
obj2.age=21                 //被Object.freeze()冻结后,不可以改变    
obj2.foods[1]='pear'        //可以改变  freeze只能冻结根层 嵌套引用类型需要嵌套递归

//实现创建引用类型:
    function deepFreeze(obj) {
            Object.freeze(obj);
            (Object.keys(obj) || []).forEach((key) => {
                let innerObj = obj[key]
                if (typeof innerObj === 'object') {
                    deepFreeze(innerObj);
                }
            }
            )
        }

        const tempObj = {
            id: 23,
            name: '1',
            food: ['banana', 'apple']
        }
        deepFreeze(tempObj)

综上所述,const不仅是一个声明关键字,更是ES6规范中保障代码质量的重要工具。通过理解其作用域、死区机制及对象冻结特性,开发者可以编写出更健壮、更可预测的JavaScript代码。

本文就到这里了,希望能够给你带来帮助,也希望您能够多多关注本站的更多内容!

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章