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])
    }
  })
}
相關文章
相關標籤/搜索