成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

ES6 簡單特性學(xué)習(xí)記錄

番茄西紅柿 / 1846人閱讀

摘要:它是用來作為回調(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模板:





11111
22223
33333

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 ;i

const 除了具備上述 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

相關(guān)文章

  • JS筆記

    摘要:從最開始的到封裝后的都在試圖解決異步編程過程中的問題。為了讓編程更美好,我們就需要引入來降低異步編程的復(fù)雜性。異步編程入門的全稱是前端經(jīng)典面試題從輸入到頁面加載發(fā)生了什么這是一篇開發(fā)的科普類文章,涉及到優(yōu)化等多個(gè)方面。 TypeScript 入門教程 從 JavaScript 程序員的角度總結(jié)思考,循序漸進(jìn)的理解 TypeScript。 網(wǎng)絡(luò)基礎(chǔ)知識(shí)之 HTTP 協(xié)議 詳細(xì)介紹 HTT...

    rottengeek 評(píng)論0 收藏0
  • ES6-7

    摘要:的翻譯文檔由的維護(hù)很多人說,阮老師已經(jīng)有一本關(guān)于的書了入門,覺得看看這本書就足夠了。前端的異步解決方案之和異步編程模式在前端開發(fā)過程中,顯得越來越重要。為了讓編程更美好,我們就需要引入來降低異步編程的復(fù)雜性。 JavaScript Promise 迷你書(中文版) 超詳細(xì)介紹promise的gitbook,看完再不會(huì)promise...... 本書的目的是以目前還在制定中的ECMASc...

    mudiyouyou 評(píng)論0 收藏0
  • Angular2 VS Angular4 深度對(duì)比:特性、性能

    摘要:的特性和性能是的超集,用于幫助的開發(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...

    孫淑建 評(píng)論0 收藏0
  • 2016年前端開發(fā)學(xué)習(xí)計(jì)劃

    摘要:年,軟件開發(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í)也有我們覺...

    asoren 評(píng)論0 收藏0
  • 2016年前端開發(fā)學(xué)習(xí)計(jì)劃

    摘要:年,軟件開發(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í)也有我們覺...

    Null 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<