React中const是:1、const聲明的變量是不得改變的值;2、const的作用域與let命令相同;3、const命令聲明的常量也是不提升;4、const聲明的常量,也與let一樣不可重復(fù)聲明;5、const聲明一個只讀的常量。
本教程操作環(huán)境:windows7系統(tǒng)、React17版,該方法適用于所有品牌電腦。
React中const是:
1、const聲明一個只讀的常量。一旦聲明,常量的值就不能改變。
const PI = 3.1415; PI // 3.1415 PI = 3; // TypeError: Assignment to constant variable.
上面代碼表明改變常量的值會報錯。
2、const聲明的變量是不得改變的值,這意味著,const一旦聲明變量,就必須立即初始化,不能留到以后賦值。
const foo; // SyntaxError: Missing initializer in const declaration
上面代碼表示,對于const來說,只聲明不賦值,就會報錯。
3、const的作用域與let命令相同:只在聲明所在的塊級作用域內(nèi)有效。
if (true) { const MAX = 5; } MAX // Uncaught ReferenceError: MAX is not defined
4、const命令聲明的常量也是不提升,同樣存在暫時性死區(qū),只能在聲明的位置后面使用。
if (true) { console.log(MAX); // ReferenceError const MAX = 5; }
上面代碼在常量MAX聲明之前就調(diào)用,結(jié)果報錯。
5、const聲明的常量,也與let一樣不可重復(fù)聲明。
var message = "Hello!"; let age = 25; // 以下兩行都會報錯 const message = "Goodbye!"; const age = 30;
6、對于復(fù)合類型的變量,變量名不指向數(shù)據(jù),而是指向數(shù)據(jù)所在的地址。const命令只是保證變量名指向的地址不變,并不保證該地址的數(shù)據(jù)不變,所以將一個對象聲明為常量必須非常小心。
const foo = {}; foo.prop = 123; foo.prop // 123 foo = {}; // TypeError: "foo" is read-only
上面代碼中,常量foo儲存的是一個地址,這個地址指向一個對象。不可變的只是這個地址,即不能把foo指向另一個地址,但對象本身是可變的,所以依然可以為其添加新屬性。
下面是另一個例子。
const a = []; a.push('Hello'); // 可執(zhí)行 a.length = 0; // 可執(zhí)行 a = ['Dave']; // 報錯
上面代碼中,常量a是一個數(shù)組,這個數(shù)組本身是可寫的,但是如果將另一個數(shù)組賦值給a,就會報錯。
7、如果真的想將對象凍結(jié),應(yīng)該使用Object.freeze方法。
const foo = Object.freeze({}); // 常規(guī)模式時,下面一行不起作用; // 嚴(yán)格模式時,該行會報錯 foo.prop = 123;
上面代碼中,常量foo指向一個凍結(jié)的對象,所以添加新屬性不起作用,嚴(yán)格模式時還會報錯。
8、除了將對象本身凍結(jié),對象的屬性也應(yīng)該凍結(jié)。下面是一個將對象徹底凍結(jié)的函數(shù)。
var constantize = (obj) => { Object.freeze(obj); Object.keys(obj).forEach( (key, value) => { if ( typeof obj[key] === 'object' ) { constantize( obj[key] ); } }); };
ES5只有兩種聲明變量的方法:var命令和function命令。ES6除了添加let和const命令,還有另外兩種聲明變量的方法:import命令和class命令。所以,ES6一共有6種聲明變量的方法。
相關(guān)免費(fèi)學(xué)習(xí)推薦:javascript(視頻)