![5959a5cd41dbed2bee5d0074f3cd1c39.png](https://i-blog.csdnimg.cn/blog_migrate/7b6a35b381795f486ebee2633a610a61.jpeg)
ECMAScript 2015(ECMAScript 6)
ES2015(ES6) 新增加了两个重要的 JavaScript 关键字: let 和 const。
let 声明的变量只在 let 命令所在的代码块内有效。
const 声明一个只读的常量,一旦声明,常量的值就不能改变。
在 ES6 之前,JavaScript 只有两种作用域: 全局变量 与 函数内的局部变量。
以上是截止至 19年10月份 菜鸟教程提供给开发者关于ES6新命名变量关键词 let 和 const 的解释。但是很不幸的是:解释中关于 const 的部分是错误或者说不准确的!
大部分网上关于const的解释也是模糊不清,大家只是知道 const 和常量有关系。但是我们为什么要用const,什么情况下用const?本文会针对const关键词做详细的解释,文不在多,字字诛心
首先,我们用const声明一个 “常量”,实际是创建了一个不可修改的指针,指向内存中一块区域。我们交给const“常量”的内容就在这块区域中。
const A = 1 // 值不可改变
const B = '1' // 值不可改变
const C = true // 值不可改变
const D = {d1: 1} // 属性实际可以改变 例如 D.d1 = 2
const E = ['e1'] // item实际可以改变 例如 E[0] = 'e2'
由此可见,基础数据类型由于其值是存放在栈中的,修改值后实际内存地址也会变更,所以违反了const声明常量不可修改指针的原则。
而引用数据类型则不同,由于修改其属性不影响堆中对应地址变化,所以值可以改变。但是例如以下示例,实际修改了引用地址,则会运行错误:
const D = {d1: 1}
const E = ['e1']
D = {d1: 2} // 错误
E = ['e2'] // 错误
了解了const的使用原理后,实际业务开发过程中,const到底有什么用呢?
1、要声明基础数据类型的常量(后续无需修改)推荐使用const
const num = 1
const str = '字符串'
const boo = true
2、要声明引用数据类型的常量,推荐使用const(虽然可以修改其属性,但是由于const声明的变量和let声明的变量在值为引用数据类型下,存放的方式是不同的,非滥用const的情况下,系统检索const变量的速度比let快)
const obj = {a: 1}
const list = [1]
总结:
1、如果const声明的数据类型为引用数据类型,其值的属性是可以改变的!
2、业务中后续无需改变的变量,可以采用const声明方式,由于检索方式不同,const的效率会高于let。
3、可以用在对象、数组与函数上,因为const声明方式一声明时就要赋值,犯错的机会会减少很多。