相信同學(xué)們?cè)诳匆娺@個(gè)標(biāo)題的時(shí)候就一臉懵逼了,什么?JS能常量定義?別逗我好嗎?確切的說,JS當(dāng)中確實(shí)沒有常量(ES6中好像有了常量定義的關(guān)鍵字),但是深入一下我們可以發(fā)現(xiàn)JS很多不為人知的性質(zhì),好好利用這些性質(zhì),就會(huì)發(fā)現(xiàn)一個(gè)不一樣的JS世界。
首先,在JS當(dāng)中,對(duì)象的屬性其實(shí)還含有自己的隱含性質(zhì),比如下面對(duì)象:
1 var obj = {};2 obj.a = 1;3 obj.b = 2;
在這里我們定義了一個(gè)對(duì)象 obj ,并且定義了這個(gè)對(duì)象的兩個(gè)屬性 a 、 b ,我們可以修改這兩個(gè)屬性的值,可以用 delete 關(guān)鍵字刪除這兩個(gè)屬性,也可以用 for ... in ... 語句枚舉 obj 對(duì)象的所有屬性,以上的這些操作叫做對(duì)象屬性的性質(zhì),在我們平常編寫代碼的時(shí)候我們會(huì)不知不覺的默認(rèn)了這些性質(zhì),把他們認(rèn)作為JS應(yīng)有的性質(zhì),殊不知這些性質(zhì)其實(shí)是可以修改的。我通常的定義的屬性的方法,默認(rèn)了屬性的性質(zhì),不過我們也可以在定義屬性的時(shí)候修改屬性的性質(zhì),比如:
1 var obj = {}; 2 obj.a = 1; 3 obj.b = 2; 4 5 //等價(jià)于 6 var obj = { 7 a: 1, 8 b: 2 9 }10 11 //等價(jià)于12 var obj = {};13 Object.defineProperty(obj, "a", {14 value: 1, //初始值15 writable: true, //可寫16 configurable: true, //可配置17 &