版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
Es6ES6,全稱ECMAScript6.0,是JavaScript的下一個版本標(biāo)準(zhǔn),2015.06發(fā)版。ES6主要是為了解決ES5的不足,比如JavaScript里并沒有類的概念,但是目前JavaScriptES5ES6,不過只實現(xiàn)了ES6的部分特性和功能。Tableofvar與let/const類Asyncvarversuslet/除了var以外,我們現(xiàn)在多了兩個新的標(biāo)識符來變量的存letconst。不同于var,let和const語句不會造成提升。var的例子:varvarsnack='MeowfunctiongetFood(food)if(food)varsnack=return}return}getFood(false);//letletsnack='MeowfunctiongetFood(food)if(food)letsnack=return}return}getFood(false);//'Meowvar后可能會導(dǎo)致預(yù)期意外的結(jié)果。注意:letconst是塊級作用域語句。所以在語句塊以外這些變量時,會造成錯誤ReferenceError。letletx='hi';//ReferenceError:xisnot最佳實踐:在重構(gòu)老代碼時,var需要格外的注意。在創(chuàng)建個新項目時,使用let一個變量,使用const來一個不RecingIIFEswithES6支持塊級作用域(更貼近其他語言),((function()varfood='Meowconsole.log(food);//ReferenceES6{{letfood='Meow}console.log(food);//ReferenceArrow一些時候,我們在函數(shù)嵌套中需要上下文中的this。比如下面的例子(name)=}.prototype.prefixName=function(arr)returnarr.map(function(character)+character;//Cannotreadproperty'name'of(name)=}.prototype.prefixName=function(arr)varthat=this;//Storethecontextofreturnarr.map(function(character)+(name)=}.prototype.prefixName=function(arr)returnarr.map(function(character)+},(name)=}.prototype.prefixName=function(arr)returnarr.map(function(character)+(name)=}.prototype.prefixName=function(arr)returnarr.map(character=>+varvarsquares=arr.map(function(x){returnx*x});//Functionconstarr=[1,2,3,4,5];constsquares=arr.map(x=>x*x);ArrowFunctionforterserES6中,標(biāo)準(zhǔn)庫也被同樣增強了,像字符串對象就新增.includes.repeat方法。.includes(varvarstring='food';varsubstring=console.log(string.indexOf(substring)>-.inclues1.includes()方極簡地返回一個布爾值結(jié)果constconststring='food';constsubstring=console.log(string.includes(substring));//.repeat(functionrepeatfunctionrepeat(string,count){varstrings=[];while(strings.length<count){}}return}ES6////String.repeat(numberOfRepetitions)'meow'.repeat(3);Temte varvartext="Thisstringcontains\"doublequotes\"whicharelettext=`Thisstringcontains"doublequotes"whichdon'tneedtobeescapedanymore.`;varvarname='Tiger';varage=console.log('Mycatisnamed'+name+'andis'+age+'yearsconstconstname='Tiger';constage=console.log(`Mycatisnamed${name}andis${age}yearsES5varvartext='cat\n'+'dog\n'+varvartext=letlettext=(`catletlettoday=newDate();lettext=`ThetimeanddateDestructuringvarvararr=[1,2,3,4];vara=arr[0];varb=arr[1];varc=arr[2];vard=arr[3];let[a,b,c,d]=[1,2,3,console.log(a);//1console.log(b);//Destructuringvarvarluke={occupation:'jedi',father:'anakin'};varoccupation=luke.occupation;//'jedi'varfather=luke.father;//'anakin'letluke={occupation:'jedi',father:'anakin'};let{occupation,father}=luke;console.log(occupation);//'jedi'console.log(father);//ES6Browserify這樣的庫,Node.jsrequire。ES6AMD和CommonJSExportinginmodule.exportsmodule.exports=1;module.exports={foo:'bar'};module.exports['foo','bar'];module.exports=functionbar()ExportinginES6中,提供了多種設(shè)置模塊出口的方式,比如我們要導(dǎo)出一個變量,那么:exportexportletname='David';exportletage=functionfunctionsumTwo(a,b)returna+}functionsumThree(a,b,c)returna+b+}export{sumTwo,sumThreeexportexportfunctionsumTwo(a,b)returna+}exportfunctionsumThree(a,b,c)returna+b+}functionfunctionsumTwo(a,b)returnreturna+}functionsumThree(a,b,c)returna+b+}letapi=exportdefault最佳實踐exportdefaultCommonJS模塊中,通用的習(xí)慣是設(shè)置一個出CommonJSES6ImportinginES6importimport就像Python一樣,我們還可以命 importimport{sumTwo,sumThree}fromimportimportsumTwoasaddTwoNumbers,sumThreeassumThreeNumbers}from引入所有的東西(原文:importallthethings)(也稱為命名importimport*asutilfromimportimport*asadditionUtilfrom'math/addtion';const{sumTwo,sumThree=像這樣默認(rèn)對象我們建議一個模塊導(dǎo)出的值應(yīng)該越簡潔越好,不過有時候有必要的話命名我們建議一個模塊導(dǎo)出的值應(yīng)該越簡潔越好,不過有時候有必要的話命名和默 可以混著用。如果一個模塊是這樣導(dǎo)出的// port{fooasdefault,foo1,foo2importapifrom'math/addition';//Sameas:import{defaultasapifromimportimportfoo,{foo1,foo2}fromcommonjsimportimportReactfrom'react';const{Component,PropTypes}=importimportReact,{Component,PropTypes}from所以,改變一個模塊中的值的話,會影響其他本模塊的代ES5參數(shù)默認(rèn)值(defaultvalues),參數(shù)數(shù)量(indefinitearguments),參數(shù)命名(namedparameters)。ES6DefaultfunctionfunctionaddTwoNumbers(x,y){x=x||0;y=y||returnreturnx+}ES6functionfunctionaddTwoNumbers(x=0,y=0)returnx+}addTwoNumbers(2,4);//addTwoNumbers(2);//addTwoNumbers();//RestES5functionfunctionlogArguments()for(vari=0;i<arguments.length;i++){}}restfunctionfunctionlogArguments(...args){for(letargofargs){}}NamedES5的方式,jQuery采用。functioninitializeCanvasfunctioninitializeCanvas(options){varheight=options.height||600;varwidth=options.width||varlineStroke=options.lineStroke||}}Wecanachievethesamefunctionalityusingdestructuringasaformaltoafunctionfunction{height=600,width=400,lineStroke='black'})//}//Usevariablesheight,width,lineStrokefunctionfunction{height=600,width=400,lineStroke='black'}={})//}Spread我們可以利用展開操作符(SpreadOperator)來把一組數(shù)組的值,當(dāng)作參數(shù)傳Math.max(...[-1,Math.max(...[-1,100,9001,-32]);//ES6以前,我們實現(xiàn)一個類的功能的話,需要首先創(chuàng)建一個構(gòu)造函數(shù),然后 (name,age,gender) =name; =age;this.gender=gender;}.prototype.incrementAtotype.incrementAge=function()returnthis.age+= al(name,age,gender,occupation,hobby).call(this,name,age,gender);this.occupation=occupation;this.hobby=hobby;}totype=totype.incrementAge=function() .prototype.incrementAge.call(this)+=ES6{constructor(name,age,gender) =name; =age;this.gender=gender;}incrementAge()this.age+=}}al{constructor(name,age,gender,occupation,hobby)super(name,age,gender);this.occupation=occupation;this.hobby=hobby;}incrementAge()this.age+=20;} 最佳實踐:ES6中出來,這是個非常適合初學(xué)者的功能,而且能讓我們寫出符號(Symbols)ES6版本之前就已經(jīng)存在了,但現(xiàn)在我們擁有一個公共的Symbols對象是一旦創(chuàng)建就不可以被更改的(immutable)Symbol(Symbol()Symbol(描述文本會創(chuàng)建一個唯一的、在全局中不可以一個Symbol()的應(yīng)用場景是:在自己的項目中使用第代碼庫,且你需要他們的對象或者命名空間打補丁代碼,又不想改動或升級第原有代碼的時 ponent這個類添加一個 法,但又確定不了這個方不會在下個版本中加入,你可以這么做:ponent=//doponent]=()=>}Symbol.for(key)Symbol對象,但區(qū)別于上面的創(chuàng)建方法,這個對象是在全局中可以被到的。Symbol('foo')Symbol('foo')===Symbol('foo')//falseSymbol.for('foo')Symbol('foo')//falseSymbol.for('foo')===Symbol.for('foo')//SymbolsSymbol.for(key)方法來實現(xiàn)這能讓你在你的代碼中,查找包含已知的接口的 代碼中Symbol成員(譯者:這句話好難翻。。。原文:ThiscanachievedbyhavingyourcodelookforaSymbolmemberonargumentsfromthirdpartiesthatcontainsomeknowninterface.)舉個例functionfunctionreader(obj)constspecialRead=if(obj[specialRead])constreader=//dosomethingwith}elsethrownewTypeError('objectcannotbe}}constconstspecialRead=classSomeReadableType{[specialRead](){constreader=return}} ble在ES6中像其他可枚舉的對象,如數(shù)組字符串,generators一樣,當(dāng)這個方法被調(diào)用時會激活一個枚舉MapsJavascript中很重要(迫切需要)的數(shù)據(jù)結(jié)構(gòu)。ES6hash通常是使用一個對象:varvarmap=newObject();map[key1]='value1';map[key2]=getOwnProperty({getOwnProperty({hasOwnProperty:'Hah,overwritten'},TypeError:Property'hasOwnProperty'isnotaMapsset,getsearchletletmap=newMap();map.set('name','david');map.get('name');//map.has('name');//Mapskey了,現(xiàn)在可以使用keykey不會被強制類型轉(zhuǎn)換為字符串。letletmap=newMap([['name','david'],[true,[1,[{},[function(){},for(letkeyofmap.keys()){console.log(typeofkey);//>string,boolean,number,object,}.entries()map對象:forfor(let[key,value]ofmap.entries()){console.log(key,value);}在ES5之前的版本,我們?yōu)榱怂接袛?shù)據(jù),有好幾種方法。像使用這種下劃{constructor(age)this._age=}_incrementAge()this._age+=}}此時,我們可以選擇使用WeakMaps來替代Maps來我們的數(shù)據(jù)letlet_age=newconstructor(age)_age.set(this,}{incrementAge()letage=_age.get(this)+_age.set(this,if(age>50){console.log('Midlifecrisis');}}}使用WeakMaps來保存我們私有數(shù)據(jù)的理由之一是不會出屬性名,就像下Reflect.ownKeys():=.incrementAge();//'Midlife );//一個使用WeakMaps數(shù)據(jù)更實際的例子,就是有關(guān)于一個DOM元素和對DOM元素(有污染)地操作:letletmap=newWeakMap();letel //Storeaweakreferencetotheelementwithamap.set(el,//Accessthevalueoftheelementletvalue=map.get(el);////Removethereferenceel=null;value=map.get(el);//上面的例子中,一個對象被回收期給銷毀了,WeakMaps會自動的把自己提示jQuery是如何實現(xiàn)緩存帶有DOMWeakMaps的話,當(dāng)被緩存的DOM元素被移除的時,jQuery可以自動釋放相應(yīng)元素的內(nèi)存。通常情況下,在涉及DOM元素和緩存的情況下,使用WeakMaps是非常適合的。Promises讓我們讓我們多縮進難看的代碼(回 func1(func1(function(value1){func2(value1,function(value2){func3(value2,function(value3){func4(value3,function(value4){func5(value4,function(value5)//Dosomethingwithvalue.then(func5,value5=>//DosomethingwithvalueES6bluebirdQ。現(xiàn)在我們有了原生版本的newnewPromise((resolve,reject)reject(newError('Failedtofulfill.catch(reason=>這里有兩個處理函數(shù),resolve(Promise執(zhí)行成功完畢時調(diào)用的回調(diào)函數(shù))reject(Promise執(zhí)行不接受時調(diào)用的回調(diào)函數(shù))Promises的好處:大量嵌套錯誤回調(diào)函數(shù)會使代碼變得難以閱讀此外,Promise處理后的值,無論是解決還是的結(jié)果值,都PromisesvarvarfetchJSON=function(url)returnnewPromise((resolve,reject)=>.done((json)=>.fail((xhr,status,err)=>reject(status+varvarurls=''varurlPromises=.then(function(results){results.forEach(function(data){.catch(function(err){console.log('Failed:',err);就像Promises如何讓我們避免回調(diào) 一樣,Generators也可以使我們的代Generators本質(zhì)上是一種支持的函數(shù),隨后返回表達式的值。Generators實際上是支持暫停運行,隨后根據(jù)上一步的返回值再繼續(xù)運行的一generatorsfunctionfunction*sillyGenerator()yieldyieldyieldyield}vargenerator=sillyGenerator();console.log(generator.next());//{value:1,done:false}console.log(generator.next());//{value:2,done:false}console.log(generator.next());//{value:3,done:falseconsole.log(generator.next());//{value:4,done:falsenextgenerator向前“推動”,同時Generators////Hidingasynchronousitywithfunctionrequest(url)getJSON(url,function(response){}generatorfunc
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年軟件購買許可合同
- 2024油漆車間危廢處理承包服務(wù)合同3篇
- 2024年度房產(chǎn)中介服務(wù)房屋買賣風(fēng)險評估與保障合同3篇
- 2024年中國薄膜式熱敏電阻市場調(diào)查研究報告
- 二零二五年度辦公室租賃合同:附帶家具配置3篇
- 2024年06月浙江浙江泰隆商業(yè)銀行寧波分行暑期實習(xí)生招考筆試歷年參考題庫附帶答案詳解
- 2024年中國膠墊圈市場調(diào)查研究報告
- 2024標(biāo)準(zhǔn)投資中介服務(wù)協(xié)議模板一
- 2025年度人工智能技術(shù)研發(fā)合伙協(xié)議3篇
- 2024年標(biāo)準(zhǔn)鋼結(jié)構(gòu)采購具體合同版B版
- 新中國史2023年春季學(xué)習(xí)通超星課后章節(jié)答案期末考試題庫2023年
- 大學(xué)生安全知識教育高職PPT完整全套教學(xué)課件
- 同步電機的基本理論和運行特性
- 焦度計的光學(xué)結(jié)構(gòu)原理
- 民法典法律知識普及講座村居版本
- 低值易耗品的驗收
- 抖音短視頻運營部門薪酬績效考核體系(抖音、快手、B站、西瓜視頻、小紅書短視頻運營薪酬績效)
- 附件2.英文預(yù)申請書(concept note)模板
- 食品食材配送人員配置和工作職責(zé)
- 大病救助申請書
- GA/T 669.6-2008城市監(jiān)控報警聯(lián)網(wǎng)系統(tǒng)技術(shù)標(biāo)準(zhǔn)第6部分:視音頻顯示、存儲、播放技術(shù)要求
評論
0/150
提交評論