const
是ES6新增长的关键字,做用是声明一个只读变量。这个变量指向的内容地址是不能够改动的。数组
const a = 1 a = 4 // TypeError: Assignment to constant variable.
和let
同样,它也有暂时性死区和块级做用域的特性。数据结构
// 暂时性死区 console.log(b) // ReferenceError const b = 2
// 块级做用域 if (true) { const c = 2 } console.log(c) // Uncaught ReferenceError: MAX is not defined
const
声明的值是基础数据类型(Number,String,Boolean),那么这个变量的值就不能够改变。若是值是复合类型(主要是对象和数组),那么里面的属性或者每一项则能够改变。由于const只能保证这个指针是固定的,可是指向的数据结构则不能够控制。指针
const d = {} d.name = '123' console.log(d.name) // '123' d = {} // TypeError: "d" is read-only
const f = [] f.push('123') // ['123'] console.log(f) // ['123'] f = [] // Uncaught TypeError: Assignment to constant variable.
若是想要将一个对象给锁死,应该使用Object.freeze
code
const e = Object.freeze({}) // 常规模式时,下面一行不起做用 // 严格模式时,该行会报错 Uncaught TypeError: Cannot add property name, object is not extensible e.name = '123'
若是想要完全锁死,应该将对象下面的全部属性锁死对象
function freezeObj(obj) { Object.freeze(obj) Object.keys(obj).forEach(function (v) { if (typeof obj[v] === 'object') { freezeObj(obj[v]) } }) }