摘要:凍結(jié)對(duì)象可以使用方法。對(duì)象的解構(gòu)賦值必須要屬性名相同,順序毫無(wú)影響。數(shù)組解構(gòu)賦值默認(rèn)值,當(dāng)?shù)忍?hào)右邊的值時(shí),默認(rèn)值生效。
let變量
let聲明的變量在let命令所在的代碼塊中有效。不存在變量提升,只能先聲明后使用。
暫存死區(qū)如果區(qū)塊中存在let和const命令,這個(gè)區(qū)塊對(duì)這些命令聲明的變量,從一開(kāi)始就形成了封閉作用域。凡是在聲明之前就使用這些變量。
var a = 1; { a = 2; //ReferenceError let a = "a"; console.log(a); //"a"; }
在相同塊級(jí)作用域中,不能用let重復(fù)聲明同一變量。即使已存在的變量是通過(guò)var聲明的。
let a = 1; let a = 2; //報(bào)錯(cuò) let a = 1; var a = 2; //報(bào)錯(cuò),var聲明有變量提升作用塊級(jí)作用域和函數(shù)聲明
在塊級(jí)作用域中,用let聲明的變量只在當(dāng)前作用域中有效,且不會(huì)受到外部的影響,所以塊級(jí)作用域可以替代自執(zhí)行函數(shù)表達(dá)式。
理論上,函數(shù)在塊級(jí)作用域中聲明行為和let類(lèi)似,但在es6瀏覽器環(huán)境中,為了兼容老版本,函數(shù)聲明與var聲明變量類(lèi)似,會(huì)提升到全局作用域頭部,和當(dāng)前塊級(jí)作用域的頭部,為了避免差異,可以將函數(shù)聲明寫(xiě)成函數(shù)表達(dá)式。
let fn = function () {}; //函數(shù)表達(dá)式const常量
聲明常量必須馬上賦值且不能再改變。const和let有類(lèi)似的特點(diǎn):在塊級(jí)作用域內(nèi)有效,聲明不提升,存在暫存死區(qū),不可重復(fù)聲明。
復(fù)合型數(shù)據(jù)如object,聲明后不可在重新賦值,但可以修改這個(gè)值本身,比如修改屬性和新增屬性。凍結(jié)對(duì)象可以使用Object.freeze方法。
const json = Object.freeze({}); //常規(guī)模式下修改json無(wú)效,嚴(yán)格模式下報(bào)錯(cuò)頂層變量
javascript的頂層對(duì)象是window,node的頂層對(duì)象是global,ES6規(guī)定用let const class聲明的變量不在是頂層對(duì)象的屬性。
let a = 1; window.a //undefined解構(gòu)賦值
從數(shù)組和對(duì)象中提取值,對(duì)變量進(jìn)行賦值,稱(chēng)為解構(gòu)(destructuring)
數(shù)組的解構(gòu)賦值,按照對(duì)應(yīng)的順序賦值,如果值數(shù)量超出則多余的值被拋棄,如果值不夠則為undefined。
let arr = [1, [2, 3]]; let [a, [b, c]] = arr;
對(duì)象的解構(gòu)賦值必須要屬性名相同,順序毫無(wú)影響。如果屬性名不同,需要寫(xiě)成如下形式。
let {a: b} = {c: 1}; b //1
實(shí)際上對(duì)象解構(gòu)賦值的是后者。
let {a} = {a: 1} //簡(jiǎn)寫(xiě) let {a: a} = {a: 1} //全寫(xiě)
字符串解構(gòu)賦值和數(shù)組類(lèi)似。
let [a, b, c] = "hello"; console.log(a,b,c) //h,e,l
數(shù)組解構(gòu)賦值默認(rèn)值,當(dāng)?shù)忍?hào)右邊的值 === undefined時(shí),默認(rèn)值生效。
let [a = 1, b = 2] = [undefined, null]; console.log(a, b); //1 null
以上代碼邏輯是:
if ([undifined, null][0] === undefined) { a = 1; } else { a = [undifined, null][0] }
對(duì)象解構(gòu)賦值默認(rèn)值,當(dāng)對(duì)象屬性值嚴(yán)格等于undefined時(shí)。
let {a, b=2} = {1, undefined} a,b //1,2 let {a: b=1} = {a: undefined} b //1
事實(shí)上,只要某種數(shù)據(jù)結(jié)構(gòu)具有 Iterator 接口,都可以采用數(shù)組形式的解構(gòu)賦值。
函數(shù)參數(shù)的解構(gòu)賦值,傳入的參數(shù)不是數(shù)組或?qū)ο螅亲兞俊?/p>
let fn = ( [a, b] ) => { return a + b; }; fn ([1, 2]); //3
[[1,2],[3,4]].map([a,b]=> a+b); //[3,7]
函數(shù)參數(shù)也可使用默認(rèn)值
let fn({a=1, b=2} = {}) { return [a,b]} fn({a:10}) // [10,2]
等號(hào)右邊如果不是對(duì)象,會(huì)先轉(zhuǎn)成對(duì)象,轉(zhuǎn)換失敗則報(bào)錯(cuò)。
let {toString: s} = 123; s === Number.prototype.toString let {toString: s} = true; s === Blooean.prototype.toString
undefined null不能轉(zhuǎn)成對(duì)象,結(jié)構(gòu)賦值報(bào)錯(cuò)。
let {a} = undefined; //TypeError let {b} = null; //TypeError
解構(gòu)賦值應(yīng)用:
//交換變量的值 let a = 1, b = 2; [a,b] = [b, a]; //函數(shù)返回多個(gè)值 let fn = () => {x: 1, y: 2} //提取json數(shù)據(jù) let {a, b} = obj;字符串?dāng)U展
ES6提供for...of方法遍歷字符串。
新增的其他方法:startsWidth() endsWidth() includes()。
let s = "hello word!"; s.startsWith("hello"); //true s.endsWidth("word"); //true s.includes("o"); //true
charAt() 用于返回給定位置的字符,對(duì)于編碼大于0xFFFF的字符用at()方法。
"ab".charAt(0) //"a" "
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/107758.html
摘要:解決方法經(jīng)過(guò)查閱資料,發(fā)現(xiàn)可以通過(guò)打包工具來(lái)將依賴(lài)合并成一個(gè)文件,然后引入中。感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持 這段時(shí)間,學(xué)習(xí)了一點(diǎn)關(guān)于es6新規(guī)范的知識(shí),然后心血來(lái)潮,想嘗試一下用ES6編寫(xiě)的代碼在瀏覽器中跑起來(lái)。 說(shuō)干就干,先說(shuō)下我的實(shí)現(xiàn)步驟(沒(méi)想到有坑!) 1.把ES6代碼轉(zhuǎn)譯成ES5;2.html文件引入轉(zhuǎn)譯后的ES5;3.然后在瀏覽器環(huán)境中運(yùn)行;4.在node...
摘要:解決方法經(jīng)過(guò)查閱資料,發(fā)現(xiàn)可以通過(guò)打包工具來(lái)將依賴(lài)合并成一個(gè)文件,然后引入中。感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持 這段時(shí)間,學(xué)習(xí)了一點(diǎn)關(guān)于es6新規(guī)范的知識(shí),然后心血來(lái)潮,想嘗試一下用ES6編寫(xiě)的代碼在瀏覽器中跑起來(lái)。 說(shuō)干就干,先說(shuō)下我的實(shí)現(xiàn)步驟(沒(méi)想到有坑!) 1.把ES6代碼轉(zhuǎn)譯成ES5;2.html文件引入轉(zhuǎn)譯后的ES5;3.然后在瀏覽器環(huán)境中運(yùn)行;4.在node...
摘要:下載地址安裝一個(gè)好用的命令行工具在環(huán)境下,系統(tǒng)默認(rèn)的非常難用,所以我個(gè)人比較推薦大家使用或者。下載地址安裝在命令行工具中使用查看版本的方式確保與都安裝好之后,我們就可以安裝了。前端基礎(chǔ)進(jìn)階系列目錄 showImg(https://segmentfault.com/img/remote/1460000009654403?w=1240&h=272); 對(duì)于新人朋友來(lái)說(shuō),想要自己去搞定一個(gè)E...
摘要:的翻譯文檔由的維護(hù)很多人說(shuō),阮老師已經(jīng)有一本關(guān)于的書(shū)了入門(mén),覺(jué)得看看這本書(shū)就足夠了。前端的異步解決方案之和異步編程模式在前端開(kāi)發(fā)過(guò)程中,顯得越來(lái)越重要。為了讓編程更美好,我們就需要引入來(lái)降低異步編程的復(fù)雜性。 JavaScript Promise 迷你書(shū)(中文版) 超詳細(xì)介紹promise的gitbook,看完再不會(huì)promise...... 本書(shū)的目的是以目前還在制定中的ECMASc...
摘要:實(shí)現(xiàn)原理創(chuàng)建一個(gè)指針對(duì)象,指向當(dāng)前數(shù)據(jù)結(jié)構(gòu)的起始位置。也就是說(shuō),遍歷器對(duì)象本質(zhì)上,就是一個(gè)指針對(duì)象。具體來(lái)說(shuō),就是返回一個(gè)包含和兩個(gè)屬性的對(duì)象。接口部署在對(duì)象的屬性上可以調(diào)用這個(gè)屬性,就得到遍歷器對(duì)象。 Iterator實(shí)現(xiàn)原理 創(chuàng)建一個(gè)指針對(duì)象,指向當(dāng)前數(shù)據(jù)結(jié)構(gòu)的起始位置。也就是說(shuō),遍歷器對(duì)象本質(zhì)上,就是一個(gè)指針對(duì)象。 第一次調(diào)用指針對(duì)象的next方法,可以將指針指向數(shù)據(jù)結(jié)構(gòu)的第一...
閱讀 1209·2021-11-22 12:05
閱讀 1336·2021-09-29 09:35
閱讀 630·2019-08-30 15:55
閱讀 3122·2019-08-30 14:12
閱讀 954·2019-08-30 14:11
閱讀 2875·2019-08-30 13:10
閱讀 2400·2019-08-29 16:33
閱讀 3327·2019-08-29 11:02