摘要:它是用來作為回調(diào)函數(shù)使用的,主要是為了簡化回調(diào)函數(shù)的寫法。簡單用法,簡化回調(diào)我們都知道數(shù)組的并不是根據(jù)數(shù)值大小來排序的,需要排序時(shí),要通過回調(diào)函數(shù)的形式來確定排序方式箭頭函數(shù)簡化。
變量定義的新方式:let/ const
let 特性:
不允許重復(fù)聲明
沒有變量提升(預(yù)解析)
塊級(jí)作用域(一對(duì) {} 包括的區(qū)域稱為一個(gè)代碼塊,let 聲明的變量只在該代碼塊起作用)
例子1 :簡單的打印數(shù)據(jù)
使用 var:
for(var i = 0; i<10 ; i++ ){ setTimeout(()=>console.log(i)) // 執(zhí)行10次,全都打印 10 }
使用 let:
for(let i = 0; i<10 ; i++ ){ setTimeout(()=>console.log(i)) // 執(zhí)行10次,打印 0 - 9 }
之前我們要實(shí)現(xiàn)這樣的打印,必須使用閉包:
for(var i = 0; i<10;i++){ (function(j){ setTimeout(()=>console.log(j)) // 執(zhí)行10次,打印 0 - 9 })(i) }
例子二:在網(wǎng)頁中常常會(huì)有切換 tab ,展示對(duì)應(yīng)的信息的需求,我們使用 var 來處理時(shí),常常使用的自定義屬性,來保存點(diǎn)擊的索引。btns[i].index=i。用于找到對(duì)應(yīng)的元素。:
html模板:
111112222333333
js:
var btns = document.querySelectorAll("button") var divs = document.querySelectorAll("div") for (var i=0 ;i使用 let:
var btns = document.querySelectorAll("button") var divs = document.querySelectorAll("div") for (let i=0 ;iconst 除了具備上述 let 的特性外,還有自己的一個(gè)特性:定義之后的值,是固定不變不能被修改的。
值得注意的是下面這兩種情況是不會(huì)報(bào)錯(cuò)的:
{ const a = {value:1} a.value = 2 console.log(a) // {value:2} const b = [1,2,3] b.push(4) console.log(b) // [1,2,3,4] }解構(gòu)賦值ES6 允許按照一定的模式,從數(shù)組和對(duì)象中提取值,這樣就稱為解構(gòu)
數(shù)組:按照對(duì)應(yīng)的順序解構(gòu)
{ var arr = [[1,2,3],[4,5,6],[7,8,9]] var [a,b,c] = arr // a : [1,2,3] // b : [4,5,6] // c : [7,8,9] // 用法1 var x = 1; var y = 2; [y,x] = [x,y] console.log(x,y) // 2 1 }對(duì)象按照對(duì)應(yīng)的名稱一一對(duì)應(yīng)進(jìn)行解析:
{ var obj={ get:function(){ return "get" }, value:1, data:[1,2,3], str:"string" } var {str,get,data} = obj console.log(str) // string console.log(get()) //get console.log(data) // [1,2,3] }模板字符串模板字符串 是增強(qiáng)版的字符串,使用反引號(hào)(`)作為標(biāo)識(shí) 。可以當(dāng)做普通字符串使用,也可以用來定義多行字符串(會(huì)保留換行)。或者在字符串中嵌入變量。
在模板字符串,需要引用變量使用 ${變量名} 的形式。在 {}可以進(jìn)行運(yùn)算,也可以引用對(duì)象屬性。
{ var name = "xiaoming" var age = 19 var str = `my name is ${name} ,my age is ${age}` console.log(str) //"my name is xiaoming ,my age is 19" }擴(kuò)展Array.from(arrayLike[, mapFn[, thisArg]])
arrayLike : 想要轉(zhuǎn)換成真實(shí)數(shù)組的類數(shù)組對(duì)象或可遍歷對(duì)象。
mapFn : 可選參數(shù),如果指定了該參數(shù),則最后生成的數(shù)組會(huì)經(jīng)過該函數(shù)的加工處理后再返回。
thisArg : 可選參數(shù),執(zhí)行 mapFn 函數(shù)時(shí) this 的值。方法用于將兩類對(duì)象轉(zhuǎn)為真正的數(shù)組:類似數(shù)組的對(duì)象和可遍歷的對(duì)象(包括 ES6 新增的數(shù)據(jù)結(jié)構(gòu) Set 和 Map )
{ // NodeList對(duì)象 let ps = document.querySelectorAll("p"); Array.from(ps); // 將可迭代對(duì)象(Set 對(duì)象)轉(zhuǎn)換成數(shù)組 Array.from(new Set(["foo", window])); // ["foo", window] // 使用 map 函數(shù)轉(zhuǎn)換數(shù)組元素 Array.from([1, 2, 3], x => x + x); // [2, 4, 6] // 將類數(shù)組對(duì)象(arguments)轉(zhuǎn)換成數(shù)組 (function () { var args = Array.from(arguments); return args; })(1, 2, 3); // [1, 2, 3] }而在這之前,我們要轉(zhuǎn)類數(shù)組對(duì)象,只能用這樣的形式: [].slice.call(ps)
當(dāng)然或許你根本不需要轉(zhuǎn),因?yàn)槲覀冇?for of 了,只要有遍歷接口的類型,它就可以進(jìn)行遍歷
(Set,String,Array,NodeList等等){ // NodeList對(duì)象 let ps = document.querySelectorAll("p"); for (let v of ps){ console.log(v) } //當(dāng)然你可能同樣需要下標(biāo): `arr.keys()`,`arr.values()`,`arr.entries()` for (let [i,item] of ps.entries()){ console.log(i,item) } }Object.assign():拷貝源對(duì)象自身的可枚舉的屬性到目標(biāo)對(duì)象身上
{ var obj = { a: 1 }; var copy = Object.assign({}, obj); console.log(copy); // { a: 1 } }值得注意的是, Object.assign()執(zhí)行的是淺拷貝。假如源對(duì)象的屬性值是一個(gè)指向?qū)ο蟮囊?,它也只拷貝那個(gè)引用值。
{ let a = { b: {c:4} , d: { e: {f:1}} } let g = Object.assign({},a) g.d.e = 32 // 設(shè)置 g.d.e 為 32 console.log(g) // {"b":{"c":4},"d":{"e":32}} console.log(a) // {"b":{"c":4},"d":{"e":32}} }如果你需要的不是合并,而只是普通json對(duì)象的復(fù)制,建議使用 JSON.parse(JSON.stringify(a)),這樣不會(huì)有上面的副作用產(chǎn)生。
函數(shù)參數(shù)默認(rèn)值。定義默認(rèn)值得參數(shù)必須是尾參數(shù),因?yàn)楹瘮?shù)形參定義默認(rèn)值后該參數(shù)可以被忽略
{ function fn(a,b=2){ return {a,b} } console.info(fn(1)) //{a: 1, b: 2} }rest參數(shù):用于獲取獲取函數(shù)的多余參數(shù)。與參數(shù)默認(rèn)值一樣,必須為尾參數(shù)
{ function foo(a,b,...args){ console.info(args) } foo(1,2,3,4,5,6) // [3, 4, 5, 6] }擴(kuò)展運(yùn)算符...:它好比 rest 參數(shù)的逆運(yùn)算??梢詫⒁粋€(gè)數(shù)組轉(zhuǎn)為用逗號(hào)分隔的參數(shù)序列。
{ // 更好的 apply 方法,例如我們?cè)谒阕畲笾档臅r(shí)候: var arr = [1,2,3,4,5] console.info(Math.max.apply(null,arr)) console.info(Math.max(...arr)) // 使用擴(kuò)展運(yùn)算符 console.info(Math.max(1,2,3,4,5)) // 最終都會(huì)被解析成這樣 // 當(dāng)然還能這樣用 var str = "string" var arr = [...str,4,5] // ["s", "t", "r", "i", "n", "g", 4, 5] }箭頭函數(shù) Arrow Functions:箭頭函數(shù)并不是用來替代現(xiàn)有函數(shù)而出現(xiàn)的,并且也無法替代。它是用來作為回調(diào)函數(shù)使用的,主要是為了簡化回調(diào)函數(shù)的寫法。
主要有三個(gè)特性:箭頭函數(shù)自身沒有 this 。函數(shù)內(nèi)的 this 指向箭頭函數(shù) 定義時(shí)所在的對(duì)象 ,而不是使用時(shí)所在的對(duì)象。
箭頭函數(shù)內(nèi)部,不存在 arguments 對(duì)象
不可以當(dāng)作構(gòu)造函數(shù),不可以使用 new 指令。
簡單用法,簡化回調(diào):
{ // 我們都知道數(shù)組的 sort 并不是根據(jù)數(shù)值大小來排序的,需要排序時(shí),要通過回調(diào)函數(shù)的形式來確定排序方式 var arr = [7,8,9,10] arr.sort() // [10, 7, 8, 9] arr.sort(function(a,b){return a-b}) // [7, 8, 9, 10] arr.sort((a,b)=> a - b ) // 箭頭函數(shù)簡化。當(dāng)僅有一條語句時(shí),有一個(gè)隱式的 return }沒有 arguments
{ var foo = (a,b,c)=>{ console.log(a,b,c) console.log(arguments) }; foo(1,2,3) // 1 2 3 // Uncaught ReferenceError: arguments is not defined }不要在對(duì)象的方法中使用箭頭函數(shù):
{ window.name="window"; var obj = { name:"obj", getName: function(){ console.log(this.name) } } obj.getName() // obj var getName = obj.getName getName() // window, this 總是指向調(diào)用者 //----------------- var obj = { name:"obj", getName: () =>{ console.log(this.name) } } obj.getName() // window /** 這里由于對(duì)象 a,并不能構(gòu)成一個(gè)作用域。所以會(huì)再往上達(dá)到全局作用域,所以 this 指向 window.. */ }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/83363.html
摘要:從最開始的到封裝后的都在試圖解決異步編程過程中的問題。為了讓編程更美好,我們就需要引入來降低異步編程的復(fù)雜性。異步編程入門的全稱是前端經(jīng)典面試題從輸入到頁面加載發(fā)生了什么這是一篇開發(fā)的科普類文章,涉及到優(yōu)化等多個(gè)方面。 TypeScript 入門教程 從 JavaScript 程序員的角度總結(jié)思考,循序漸進(jìn)的理解 TypeScript。 網(wǎng)絡(luò)基礎(chǔ)知識(shí)之 HTTP 協(xié)議 詳細(xì)介紹 HTT...
摘要:的翻譯文檔由的維護(hù)很多人說,阮老師已經(jīng)有一本關(guān)于的書了入門,覺得看看這本書就足夠了。前端的異步解決方案之和異步編程模式在前端開發(fā)過程中,顯得越來越重要。為了讓編程更美好,我們就需要引入來降低異步編程的復(fù)雜性。 JavaScript Promise 迷你書(中文版) 超詳細(xì)介紹promise的gitbook,看完再不會(huì)promise...... 本書的目的是以目前還在制定中的ECMASc...
摘要:的特性和性能是的超集,用于幫助的開發(fā)。注解提供了連接元數(shù)據(jù)和功能的工具。通過在庫中提供基本信息可以調(diào)用函數(shù)或創(chuàng)建類的實(shí)例來檢查相關(guān)元數(shù)據(jù),從而簡化了對(duì)象實(shí)例的構(gòu)建。停用它會(huì)響應(yīng)跳出舊控制器的成功事件。 showImg(https://segmentfault.com/img/bVSqTU?w=850&h=460); 在Web應(yīng)用開發(fā)領(lǐng)域,Angular被認(rèn)為是最好的開源JavaScri...
摘要:年,軟件開發(fā)界發(fā)生了很多變化。六數(shù)據(jù)存儲(chǔ)是一個(gè)關(guān)系型數(shù)據(jù)庫管理系統(tǒng),由瑞典公司開發(fā),目前屬于旗下公司。最流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),在應(yīng)用方面是最好的,關(guān)系數(shù)據(jù)庫管理系統(tǒng)應(yīng)用軟件之一。七是最新的修訂版本,年月由萬維網(wǎng)聯(lián)盟完成標(biāo)準(zhǔn)制定。 2015年,軟件開發(fā)界發(fā)生了很多變化。有很多流行的新語言發(fā)布了,也有很多重要的框架和工具發(fā)布了新版本。下面有一個(gè)我們覺得最重要的簡短清單,同時(shí)也有我們覺...
摘要:年,軟件開發(fā)界發(fā)生了很多變化。六數(shù)據(jù)存儲(chǔ)是一個(gè)關(guān)系型數(shù)據(jù)庫管理系統(tǒng),由瑞典公司開發(fā),目前屬于旗下公司。最流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),在應(yīng)用方面是最好的,關(guān)系數(shù)據(jù)庫管理系統(tǒng)應(yīng)用軟件之一。七是最新的修訂版本,年月由萬維網(wǎng)聯(lián)盟完成標(biāo)準(zhǔn)制定。 2015年,軟件開發(fā)界發(fā)生了很多變化。有很多流行的新語言發(fā)布了,也有很多重要的框架和工具發(fā)布了新版本。下面有一個(gè)我們覺得最重要的簡短清單,同時(shí)也有我們覺...
閱讀 736·2023-04-25 19:43
閱讀 3981·2021-11-30 14:52
閱讀 3807·2021-11-30 14:52
閱讀 3871·2021-11-29 11:00
閱讀 3802·2021-11-29 11:00
閱讀 3904·2021-11-29 11:00
閱讀 3580·2021-11-29 11:00
閱讀 6184·2021-11-29 11:00