核心提示:constconst跟let一样是es6中新的声明方法,很多的特性跟let是一样的。特性1.不可变更性声明简单的类型时,该变量无法修改,这就意味着不能声明不赋值 声明的非简单的类型的数据时,可以在不改...
const
const跟let一样是es6中新的声明方法,很多的特性跟let是一样的。
特性
1.不可变更性
声明简单的类型时,该变量无法修改,这就意味着不能声明不赋值 声明的非简单的类型的数据时,可以在不改变改数据的内存地址的情况下,修改数据const a=1 a=2 //报错 const a={b:1} a.b=2 console.log(a) a=3 // {b:2} // 报错
从上面的例子可以看出来,其实const声明的值不是不可以改变,而是该变量指向的内存地址不能改变,在声明为一个常量的时候,变量的指针就是指向该常量,常量改变地址指向改变,所以报错。当时对于复合型数据,变量指向内存地址,不发生改变,也就是变量直接赋值成其他的值,内部的数据结构还是内容都是可以变化得。
2.无法变量提升
console.log(a) var a=1 // undefined console.log(a) const a=1 // 报错
3.存在const不能重复定义
var a=1 var a=2 // 正常 const a=1 const a=2 // 报错 var a=1 const a=2 // 报错 let a=1 const a=2 //报错
只要同一作用域内存在相同变量被声明都会报错
4.只在块级作用域内生效
var a=1 if(true){ const a=2 } console.log(a) // 1
5.块级作用域内只能够拿到该作用域内声明的const变量,外部被忽略
var a='博主好帅' if(true){ console.log('博主不帅') const a } // 报错
报错,并没有打印(说明博主还是很帅的嘛),块级作用域内存在const定义,就算外部定义了也会报错。
顶层对象的属性
在ES5中,顶层对象的属性和全局属性是等价的,在流浪器端window为顶级对象,在Node环境中global为顶级对象。
//es5 var a=1 console.log(window.a) // 1 //es6 let a=1 console.log(window.a) // undefined
可以看出在es5中全局用var function声明还是跟全局挂钩的,而从es6开始,let const class等都不是挂在window上了