const声明常量以及冻结一个对象

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.freezecode

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])
    }
  })
}
相关文章
相关标签/搜索