摘要:和用法與類(lèi)似,都是變量的聲明,但是具有塊級(jí)作用域。首先,當(dāng)你聲明一個(gè)變量的時(shí)候,必須要初始化。將一個(gè)類(lèi)數(shù)組對(duì)象和或可遍歷對(duì)象轉(zhuǎn)換成真正的數(shù)組不會(huì)改變?cè)袑?duì)象,返回一個(gè)新的數(shù)組。
直接進(jìn)入正題吧,盡量關(guān)于ES6的知識(shí)點(diǎn)都能涉及到。
let constlet 和 const 用法與 var 類(lèi)似,
都是變量的聲明,但是let具有塊級(jí)作用域。那是什么概念呢?看下面的例子。
for(var i = 0; i<10; ++i) {} console.log(i); //10 for(let j = 0; j<10; ++j) {}; console.log(j); //undefined
上面的例子很明顯的展示了let的塊級(jí)作用域特性。
let不可以重復(fù)聲明,會(huì)提示我們:
let x = 10;let x = 20; // Uncaught SyntaxError: Identifier "x" has already been declared
當(dāng)我們?cè)谌致暶?b>var的時(shí)候,我們可以通過(guò)window來(lái)獲取這個(gè)變量,但是let不可以,
你可以將let變量看其處在一個(gè)無(wú)形的作用域內(nèi)。
我覺(jué)得在大部分時(shí)候都應(yīng)該優(yōu)先使用let,<不敢說(shuō)任何時(shí)候,總怕來(lái)個(gè)例外..>。
關(guān)于const,顧名思義,不可改變,但這也要引用類(lèi)型和基本類(lèi)型。
首先,當(dāng)你聲明一個(gè)const變量的時(shí)候,必須要初始化。
const x; //Uncaught SyntaxError: Missing initializer in const declaration
基本類(lèi)型:
`const x = 10;x = 20;//Uncaught TypeError: Identifier "x" has already been declared`
引用類(lèi)型: 就有點(diǎn)特殊了,我們可以對(duì)它帶有的屬性進(jìn)行,只要不改變它的指向。
const obj = {name: "jack"};obj.name = "berry";obj.id = 1;// OK obj = {}; //Uncaught TypeError: Assignment to constant variable.Array
Array實(shí)在用到它的地方太多了,所以我們有必要對(duì)于它新添加的方法都來(lái)過(guò)一遍。
Array.from將一個(gè)類(lèi)數(shù)組對(duì)象和或可遍歷對(duì)象轉(zhuǎn)換成真正的數(shù)組, 不會(huì)改變?cè)袑?duì)象,返回一個(gè)新的數(shù)組。
類(lèi)數(shù)組對(duì)象:有2種最常見(jiàn)的,我們都拿出來(lái)說(shuō)下。
let x = document.querySelectorAll("*"); console.log(Array.isArray(x));// false let y = Array.from(x); console.log(Array.isArray(x));// false console.log(Array.isArray(y));// true function foo () { console.log(Array.isArray(arguments));//false let args = Array.from(arguments, x => x * x); console.log(Array.isArray(args));//true console.log(args);//[1, 4, 9] } foo(1, 2, 3);
你可以看到我們?cè)?b>foo函數(shù)內(nèi)對(duì)于arguments處理的時(shí)候 出現(xiàn)了 x => x*x,這也是ES6的新特性(箭頭函數(shù))這我們將在后面提到。這邊我們可以發(fā)現(xiàn)Array.from不僅可以轉(zhuǎn)換成數(shù)組,而且可以對(duì)其中的值進(jìn)行操作,我們來(lái)看下它完整的函數(shù)定義。
Array.from(arrayLike[, mapFn[, thisArg]])
第一個(gè)是必需參數(shù),即要轉(zhuǎn)換的對(duì)象,第二個(gè)是可選參數(shù),是一個(gè)函數(shù),第三個(gè)也是可選參數(shù),指定mapFn的this對(duì)象。
所以啦,我們拆出來(lái)看成Array.from(arrayLike).map(mapFn, thisArg)
arr.fill(value[, start = 0[, end = this.length]])
使用 value 填充從 start至end的區(qū)間,并且會(huì)修改原數(shù)組對(duì)象,并且返回自身, 隨便看個(gè)例子就好。
let arr = [1, 2, 3]; console.log(arr.fill(10, 0, 2)); //[10, 10, 3] console.log(arr); //[10, 10, 3]Array.of
Array.of(element0[, element1[, ...[, elementN]]])
將所有傳進(jìn)來(lái)的參數(shù)都放進(jìn)同一個(gè)數(shù)組,并且返回這個(gè)新的數(shù)組。
console.log(Array.of("ab", 1, null, undefined));//["ab", 1, null, undefined]Array.prototype.find
arr.find(callback[, thisArg])
callback中可以傳遞的參數(shù)和在ES5中引入的新方法,如map, filter一樣,有三個(gè)參數(shù),分別是:value,index,array,同時(shí), thisArg可以指定函數(shù)中的this
函數(shù)不會(huì)修改原數(shù)組,如果callback返回true,則退出,并返回當(dāng)前value,如果遍歷結(jié)束,返回false,則返回undefined,我們看下下面這個(gè)例子就清楚了。
let arr = [3, 5, 7, 8]; let res1 = arr.find((value, index, arr) => value+index>=6); console.log(res1); //5 let res2 = arr.find((value, index, arr) => value < index); console.log(res2); //undefinedArray.prototype.findIndex
恩。。。 看函數(shù)名字就知道了,上面我們剛提到的find()是找值,這個(gè)是找索引,如果找不到則返回-1,所以這邊我們就提下有這個(gè)函數(shù),具體就不展開(kāi)了。
Array.prototype.keysarr.keys()
返回一個(gè)數(shù)組索引的迭代器, 額??!這下又牽扯出新知識(shí)了,迭代器。
一步一步來(lái),先繼續(xù)這里的,可以將問(wèn)題先留著,先看下它的用法。
for (let i of [10, 20, 30].keys()) { console.log(i);//0, 1, 2 }
上面,我們的例子會(huì)輸出0, 1, 2,這很好理解,就如我們上面說(shuō)的,返回當(dāng)前數(shù)組的索引,細(xì)心的話(huà)可以發(fā)現(xiàn),我們for的遍歷采用了for ... of的方式,這也是ES6帶給我們的全新的遍歷方法,相比于for...in會(huì)在當(dāng)前對(duì)象上所有屬性去循環(huán),而它則是直接在數(shù)據(jù)上進(jìn)行循環(huán),對(duì)于for...of我們也暫且先不展開(kāi),因?yàn)樗钠矊?shí)在可以扯出太多。
Array.prototype.valuesarr.values()
和我們上面提到的方法對(duì)應(yīng),返回每個(gè)索引下對(duì)應(yīng)的值,也是一個(gè)迭代器,我們可以用相同的for...of進(jìn)行遍歷
for (let i of [10, 20, 30].values()) { console.log(i);//10, 20, 30 }Array.prototype.entries
arr.entries()
返回一個(gè)迭代器,包含每一個(gè)數(shù)組中的 索引與其值, 也可以稱(chēng)其為鍵值對(duì)
for (let i of [10, 20, 30].entries()) { console.log(i);//[0, 10], [1, 20], [2, 30] }Arrow functions this
關(guān)于 箭頭函數(shù) 其實(shí)我們?cè)谏厦媾e例的時(shí)候,就已經(jīng)提到了,可能你已經(jīng)感受到了它帶來(lái)的便捷,在 箭頭函數(shù)中的this指針繼承于它所在的詞法作用域。我們可以通過(guò)下面的例子來(lái)感受一下,這也是我們大力推行 箭頭函數(shù) 的一個(gè)原因,可以讓我們少考慮一點(diǎn)函數(shù)中的this指針帶來(lái)的困擾。
let obj1 = { arr: [1, 2, 3], foo () { setTimeout(function () { console.log(this.arr); }, 0); } } obj1.foo();//undefined let obj2 = { arr: [1, 2, 3], foo () { let _self = this; setTimeout(function () { console.log(_self.arr); }, 0); } } obj2.foo();//[1, 2, 3] let obj3 = { arr: [1, 2, 3], foo () { setTimeout(() => { console.log(this.arr); }, 0); } } obj3.foo();//[1, 2, 3]
我們往常處理this指針帶來(lái)的問(wèn)題可能會(huì)使用 第二種方法或者bind()這邊就不給出了,我們可以很清楚地對(duì)比得出,箭頭函數(shù)給我們帶來(lái)的好處。
對(duì)了,可能你發(fā)現(xiàn)了,在obj中,我對(duì)于foo屬性的值是函數(shù)時(shí)候的寫(xiě)法,這也是一個(gè)能節(jié)省代碼量的方法,使用起來(lái)相當(dāng)方便。
即便箭頭函數(shù)不需要參數(shù),我們也必須用()來(lái)表示,只有在只有一個(gè)參數(shù)的情況下,我們才可以省略(),對(duì)于箭頭函數(shù)的返回值,有2種情況,當(dāng)你沒(méi)有使用{}將包裹,并且只有單行表達(dá)式時(shí),則默認(rèn)以其作為返回值,反之則應(yīng)顯示聲明return,一個(gè)特殊情況是對(duì)于對(duì)象字面量作為返回值時(shí),始終應(yīng)當(dāng)將其用()包裹,否則將以 undefind 處理
console.log(["a"].map( () => {} )); // undefined console.log(["a"].map( () => ({}) )); // Object console.log(["a"].map( () => { return {}; })) // Object
看上去 似乎還是 第三種更直觀(guān)。。
一些注意點(diǎn)它 沒(méi)有 arguments,也不可以對(duì)其進(jìn)行new操作,它沒(méi)有自身的this指針,同時(shí)它永遠(yuǎn)是匿名函數(shù)。
如果大家有興趣關(guān)于這方面更多知識(shí),可以自行去以下網(wǎng)站,同時(shí)也是我有關(guān)ES6的資料來(lái)源。
MDN
ES6 in depth
極客學(xué)院-深度解析ES6
有任何錯(cuò)誤,還請(qǐng)指正~~
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/79773.html
摘要:可以直譯為古怪到有魅力。里面基本上這些是被弱化了的,或者說(shuō)是被隱藏起來(lái)了。而之前的的語(yǔ)法使得入門(mén)的門(mén)檻變高了。但是,于此同時(shí),作為語(yǔ)言的獨(dú)特魅力被削弱了。應(yīng)該說(shuō),理解這些傳統(tǒng)的語(yǔ)法對(duì)也很有意義。因?yàn)楫吘惯@些只是被隱藏,而不是被剔除。 這兩天在看React的一些東西。接觸到了ES6。談?wù)勔恍┐譁\的看法。 ES6其實(shí)是個(gè)簡(jiǎn)稱(chēng)。這東西學(xué)名叫做ECMAScript 2015,或者ES 2015...
摘要:是單線(xiàn)程程序,所有代碼都是單線(xiàn)程執(zhí)行。導(dǎo)致的網(wǎng)絡(luò)請(qǐng)求都是異步執(zhí)行,異步執(zhí)行可以通過(guò)回調(diào)函數(shù)實(shí)現(xiàn)秒鐘才能打印,回調(diào)函數(shù)處理異步執(zhí)行的但是推出一種新的方法對(duì)象用于表示一個(gè)異步操作的最終狀態(tài)完成或失敗,以及其返回的值。 javascript是單線(xiàn)程程序,所有代碼都是單線(xiàn)程執(zhí)行。導(dǎo)致javascript的網(wǎng)絡(luò)請(qǐng)求都是異步執(zhí)行,異步執(zhí)行可以通過(guò)回調(diào)函數(shù)實(shí)現(xiàn): setTimeout(callbac...
摘要:首先介紹是一個(gè)庫(kù),他提供了一組用來(lái)操縱的默認(rèn)也就是無(wú)的,也可以配置為有有點(diǎn)類(lèi)似于,但是官方團(tuán)隊(duì)進(jìn)行維護(hù)的,前景更好。使用,相當(dāng)于同時(shí)具有和的能力,應(yīng)用場(chǎng)景會(huì)非常多。 首先介紹Puppeteer Puppeteer是一個(gè)node庫(kù),他提供了一組用來(lái)操縱Chrome的API(默認(rèn)headless也就是無(wú)UI的chrome,也可以配置為有UI) 有點(diǎn)類(lèi)似于PhantomJS,但Puppet...
摘要:對(duì)象允許你存儲(chǔ)任何類(lèi)型的唯一值,無(wú)論是原始值或者是對(duì)象引用。不能重復(fù)獲取的值方法用來(lái)向一個(gè)對(duì)象的末尾添加一個(gè)指定的值。 Set 對(duì)象允許你存儲(chǔ)任何類(lèi)型的唯一值,無(wú)論是原始值或者是對(duì)象引用。(不能重復(fù)) const set1=new Set([1,2,3,4,5,6]); console.log(set1); //Set { 1, 2, 3, 4, 5, 6 } 獲取set的值 cons...
摘要:雙嘆號(hào)強(qiáng)制類(lèi)型轉(zhuǎn)換為布爾值。官方示例代碼用注冊(cè)了全局組件,會(huì)把自動(dòng)注冊(cè)為屬性,所以沒(méi)有手動(dòng)寫(xiě)屬性。如果對(duì)象是響應(yīng)的,將觸發(fā)視圖更新。這是用來(lái)布爾值,又學(xué)了一招和分別代表單擊和雙擊事件綁定。 如果覺(jué)得有幫助,歡迎 star哈~ https://github.com/jiangjiu/blog-md/issues/11 感謝作者 @尤小右 大大邊寫(xiě)的超級(jí)帶感的 Vue.js 前端框架,贈(zèng)送...
閱讀 4185·2022-09-16 13:49
閱讀 1411·2021-11-22 15:12
閱讀 1534·2021-09-09 09:33
閱讀 1049·2019-08-30 13:15
閱讀 1738·2019-08-29 15:30
閱讀 669·2019-08-27 10:52
閱讀 2652·2019-08-26 17:41
閱讀 1907·2019-08-26 12:11