摘要:學(xué)習(xí)筆記的使用其他特性用來(lái)聲明常量,聲明時(shí)必須初始化聲明的常量不能重新賦值對(duì)于基本類型,值不能改變對(duì)于引用類型,存儲(chǔ)的是一個(gè)地址,地址不能變,但對(duì)象本身是可變的如果不想后續(xù)更改對(duì)象,使用文檔用來(lái)凍結(jié)一個(gè)對(duì)象。該方法返回被凍結(jié)的對(duì)象。
let命令有的幾個(gè)特性,const也有。ES6學(xué)習(xí)筆記:let的使用
其他特性:
用來(lái)聲明常量,聲明時(shí)必須初始化
const PI;//"SyntaxError: Missing initializer in const declaration
聲明的常量不能重新賦值
//對(duì)于基本類型,值不能改變 const PI = 3.1415926; PI = 3;//"TypeError: Assignment to constant variable.
//對(duì)于引用類型, const obj = {x: 0}; obj = {y: "123"};//"TypeError: Assignment to constant variable. obj.x = "123";//obj存儲(chǔ)的是一個(gè)地址,地址不能變,但對(duì)象本身是可變的
如果不想后續(xù)更改對(duì)象,使用Object.freeze
Object.freeze MDN文檔
用來(lái)凍結(jié)一個(gè)對(duì)象。凍結(jié)對(duì)象是指那些不能添加新的屬性,不能修改已有屬性的值,不能刪除已有屬性,以及不能修改已有屬性的可枚舉性、可配置性、可寫(xiě)性的對(duì)象。也就是說(shuō),這個(gè)對(duì)象永遠(yuǎn)是不可變的。該方法返回被凍結(jié)的對(duì)象。
const obj = Object.freeze({k:{}}); // 常規(guī)模式時(shí),下面一行不起作用; // 嚴(yán)格模式時(shí),該行會(huì)報(bào)錯(cuò) obj.prop = 123;//TypeError: Can"t add property prop, object is not extensible obj.k = {x: 123};//"TypeError: Cannot assign to read only property "k" of object "#
上面的例子我們又發(fā)現(xiàn)一個(gè)問(wèn)題:如果屬性值是對(duì)象,還是只能凍結(jié)該對(duì)象的地址,而內(nèi)容還是可以進(jìn)行修改。
//使用遞歸對(duì)屬性進(jìn)行遍歷并凍結(jié) var constantize = function(obj){ Object.freeze(obj); Object.keys(obj).forEach( function(key,value){ if ( typeof obj[key] === "object" ) { constantize( obj[key] ); } }); };
涉及到Object對(duì)象的幾個(gè)方法,總結(jié)下
Object.keys MDN文檔
返回一個(gè)由給定對(duì)象的所有可枚舉自身屬性的屬性名組成的數(shù)組,數(shù)組中屬性名的排列順序和使用for-in循環(huán)遍歷該對(duì)象時(shí)返回的順序一致(兩者的主要區(qū)別是 for-in 還會(huì)遍歷出一個(gè)對(duì)象從其原型鏈上繼承到的可枚舉屬性)
var arr = ["a", "b", "c"]; alert(Object.keys(arr)); // 彈出"0,1,2",數(shù)組的下標(biāo) var obj = { 0 : "a", 1 : "b", 2 : "c"}; alert(Object.keys(obj)); // 彈出"0,1,2" //enumerable默認(rèn)為false, 也就是說(shuō)getFoo是個(gè)不可枚舉的屬性 var my_obj = Object.create({}, { getFoo : { value : function () { return this.foo } } }); my_obj.foo = 1; alert(Object.keys(my_obj)); // 只彈出foo //手動(dòng)設(shè)置getFoo可枚舉 var my_obj = Object.create({}, { getFoo : { value : function () { return this.foo }, enumerable: true } });
如果想使用Object對(duì)象提供的方法,還需要注意下瀏覽器的兼容問(wèn)題。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/107008.html
摘要:另外對(duì)于已經(jīng)聲明的變量進(jìn)行解構(gòu)賦值時(shí),要非常小心。因此在行首加,將其強(qiáng)制轉(zhuǎn)化為表達(dá)式執(zhí)行。由于和無(wú)法轉(zhuǎn)為對(duì)象,所以對(duì)它們進(jìn)行解構(gòu)賦值,都會(huì)報(bào)錯(cuò)。 let和const let和const是es6新增的兩個(gè)變量聲明關(guān)鍵字,與var的不同點(diǎn)在于: (1)let和const都是塊級(jí)作用域,在{}內(nèi)有效,這點(diǎn)在for循環(huán)中非常有用,只在循環(huán)體內(nèi)有效。var為函數(shù)作用域。 (2)使用let和con...
摘要:考慮到環(huán)境導(dǎo)致的行為差異太大,應(yīng)該避免在塊級(jí)作用域內(nèi)聲明函數(shù)。函數(shù)聲明語(yǔ)句函數(shù)表達(dá)式循環(huán)循環(huán)還有一個(gè)特別之處,就是循環(huán)語(yǔ)句部分是一個(gè)父作用域,而循環(huán)體內(nèi)部是一個(gè)單獨(dú)的子作用域。聲明一個(gè)只讀的常量。 es6學(xué)習(xí)筆記-let,const和塊級(jí)作用域_v1.0 塊級(jí)作用域 javascript 原來(lái)是沒(méi)有塊級(jí)作用域的,只有全局作用域和函數(shù)作用域 例子1 因?yàn)闆](méi)有塊級(jí)作用域,所以每次的i都是一...
摘要:塊級(jí)作用域只有全局作用域和函數(shù)作用域,沒(méi)有塊級(jí)作用域,這帶來(lái)了很多不合理的場(chǎng)景。如聲明變量的方法只有兩種聲明變量的方法命令一共有六種命令變量的解構(gòu)賦值允許按照一定的模式,從數(shù)組和對(duì)象中提取,按照位置的對(duì)應(yīng)關(guān)系對(duì)變量賦值,這被稱為解構(gòu)。 塊級(jí)作用域 es5只有全局作用域和函數(shù)作用域,沒(méi)有塊級(jí)作用域,這帶來(lái)了很多不合理的場(chǎng)景。 第一種場(chǎng)景:內(nèi)層變量可能會(huì)覆蓋外層變量 var test = ...
摘要:一新增了命令和一樣都是用來(lái)聲明標(biāo)量,但所聲明的變量只在聲明的代碼塊內(nèi)及聲明之后有效命令適合在循環(huán)中使用在循環(huán)內(nèi)有效在全局內(nèi)有效命令暫時(shí)性死區(qū)大括號(hào)中的使用了聲明,所以在大括號(hào)中暫時(shí)只能在聲明之后有效不允許在同一作用域內(nèi)重復(fù)聲明變量,因此不能 一、ES6新增了let命令 let 和 var 一樣都是用來(lái)聲明標(biāo)量,但let所聲明的變量只在【聲明的代碼塊內(nèi)】及【聲明之后】有效 { c...
摘要:對(duì)比常量聲明與聲明常量聲明與聲明,都是塊級(jí)聲明。最后一點(diǎn)全局塊級(jí)綁定與不同于的另一個(gè)方面是在全局作用域上的表現(xiàn)。塊級(jí)綁定新的最佳實(shí)踐在的發(fā)展階段,被廣泛認(rèn)可的變量聲明方式是默認(rèn)情況下應(yīng)當(dāng)使用而不是??偨Y(jié)與塊級(jí)綁定將詞法作用域引入。 var變量與變量提升 使用var關(guān)鍵字聲明的變量,無(wú)論其實(shí)際聲明位置在何處,都會(huì)被視為聲明于所在函數(shù)的頂部(如果聲明不在任意函數(shù)內(nèi),則被視為在全局作用域的頂...
閱讀 1762·2021-09-23 11:34
閱讀 2484·2021-09-22 15:45
閱讀 12996·2021-09-22 15:07
閱讀 2245·2021-09-02 15:40
閱讀 4151·2021-07-29 14:48
閱讀 1083·2019-08-30 15:55
閱讀 3252·2019-08-30 15:55
閱讀 2198·2019-08-30 15:55