const聲明一個只讀常量,一旦聲明必須當即初始化,不能留到之後賦值。 同let存在塊級做用域,const命令聲明的常量也是不提高,一樣存在暫時性死區,也與let同樣不可重複聲明 本質:const實際上保證的並非變量的值不得改動,而是變量指向的那個內存地址不得改動。對於基本數據類型,值就保存在變量指向的那個內存地址,可是引用數據類型,變量指向的內存地址保存的只是一個指針,const只能保證這個指針是固定的。指針
const foo = {}; // 爲 foo 添加一個屬性,能夠成功 foo.prop = 123; foo.prop // 123 // 將 foo 指向另外一個對象,就會報錯 foo = {}; // TypeError: "foo" is read-only
若是真的不想改變對象自己須要使用Object.freeze方法code
const foo = Object.freeze({}); // 常規模式時,下面一行不起做用; // 嚴格模式時,該行會報錯 foo.prop = 123;
將對象自己及其屬性完全凍結,使用遞歸方法實現對象
var fun = (obj) =>{ Object.freeze(obj); Object.keys(obj).forEach((key)=>{ if(typeof obj[key] == 'object'){ fun(obj[key]); } }); };