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]) } }) }