<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        關于JS解構的5種有趣用法

        來源:懂視網 責編:小采 時間:2020-11-27 21:51:12
        文檔

        關于JS解構的5種有趣用法

        關于JS解構的5種有趣用法:前言 原文標題:5 Interesting Uses of JavaScript Destructuring 原文鏈接:dmitripavlutin.com/5-interesti… 定期回顧我寫的JS代碼,我發現解構運算無處不在。 獲取對象的屬性和訪問數組內容是都是很常用的操作。而解構運算使得這些操作變得非常簡單明了
        推薦度:
        導讀關于JS解構的5種有趣用法:前言 原文標題:5 Interesting Uses of JavaScript Destructuring 原文鏈接:dmitripavlutin.com/5-interesti… 定期回顧我寫的JS代碼,我發現解構運算無處不在。 獲取對象的屬性和訪問數組內容是都是很常用的操作。而解構運算使得這些操作變得非常簡單明了

        前言

        原文標題:5 Interesting Uses of JavaScript Destructuring

        原文鏈接:dmitripavlutin.com/5-interesti…

        定期回顧我寫的JS代碼,我發現解構運算無處不在。

        獲取對象的屬性和訪問數組內容是都是很常用的操作。而解構運算使得這些操作變得非常簡單明了。

        在這篇文章中,我將會講解JS解構不同于常見用法的五種使用技巧。

        1. 交換變量

        常見的交互兩個變量值的方法都需要借助一個額外的變量,看一個簡單的例子:

        let a = 1;
        let b = 2;
        let temp;
        temp = a;
        a = b;
        b = temp;
        a; // => 2
        b; // => 1

        temp是一個臨時變量,在例子中存儲了變量a的值,b的值賦給了a,最后把temp的值賦給了b。
        解構運算使得交換變量的值變得非常簡單,不需要借助第三個臨時變量:

        let a = 1;
        let b = 2;
        [a, b] = [b, a];
        a; // => 2
        b; // => 1

        [a, b] = [b, a]是一個解構運算。在等號的右側,創建了一個數組[b, a],對應的值為[2, 1]。數組的第一個值2被解構賦值給了a,第二項1被解構賦值給了b。

        即使這種方式仍然創建了一個臨時數組,但是解構賦值對于交換變量的值仍然是非常高效簡單的方式。

        這種方式并沒有什么限制。你還可以同時交互更多的變量值,比如:

        let zero = 2;
        let one = 1;
        let two = 0;
        [zero, one, two] = [two, one, zero];
        zero; //=> 0
        one; //=> 1
        two; //=> 2

        你可以交換任意數量的變量值,只是兩個變量值的交換的情況更加常見。

        2. 訪問數組

        有一個數組,這個數組有可能是空的。有一種需求是訪問任意位置數組元素,如果這個位置為空,則返回一個默認值。
        通常情況下有的人可能會使用數組的length屬性做判斷:

        const colors = [];
        let firstColor = "white";
        if (colors.length > 0) {
         firstColor = colors[0];
        }
        firstColor; //=> "white"

        幸運的是,數組解構可以更快捷高效的實現相同的效果:

        const colors = [];
        const [firstColor = "white"] = colors;
        firstColor; //=> "white"

        const [firstColor = "white"] = colors;將colors數組的第一個元素賦值給了變量firstColor。如果這個數組的下標為0的位置上沒有任何元素(注:為undefined時即認為為空),white將作為默認值賦值給firstColor。
        數組解構是非常靈活的,如果你只想訪問數組的第二個元素,方法如下所示:

        const colors = [];
        const [, secondColor = "black"] = colors;
        secondColor; //=> "black"

        在解構表達式的左邊寫一個逗號:意味著數組的第一個元素被忽略掉。colors數組下標為1的元素被解構賦值給了變量secondColor。

        3. 不可變操作

        從我開始使用React,到后來的Redux,我被迫開始寫一些遵循不可變原則的代碼。剛開始的時候確實有點不適應,不過后來我就意識到了這種方式的好處:它使得處理單向數據流更加容易。

        不可變原則禁止修改對象。幸運的是,解構可以幫助你在遵循不可變原則的同時完成這些操作。

        將解構與展開運算符(rest operator)結合使用來移除數組的第一個元素:

        const numbers = [1,2,3];
        const [, ...fooNumbers] = numbers;
        fooNumbers; //=> [2, 3]
        numbers; //=> [1,2,3]

        這個解構操作[, ...fooNumbers] = numbers創建了一個新的數組fooNumbers,這個數組包含numbers除了第一個元素外的其余元素。

        numbers數組并沒有被改變,這種方式遵循了不可變原則。

        除此之外,你也可以在遵循不可變原則的同時使用同樣的方法來刪除一個對象的屬性。如下所示,刪除big對象的foo屬性:

        const big = {
         foo: "value foo",
         bar: "value bar",
        }
        const { foo, ...small } = big;
        small; //=> { bar: "value bar" }
        big; //=>{ foo: "value foo", bar: "value bar" }

        上述方法將解構與對象展開運算符結合起來使用,創建了一個新的對象small,這個新對象包含big對象除了foo屬性之外的所有屬性。

        4. 解構可迭代的值

        在前面幾部分內容中,都是解構的數組。實際上解構運算是可以用于所有的可迭代對象的。

        許多原生的基礎類型和對象都是可迭代的,例如數組,類數組,字符串,set集合和map集合。

        例如,你可以把字符串解構成單個字符:

        const str = "cheese";
        const [firstChar = ""] = str;
        firstChar; //=> 'c'

        當然解構不僅僅限于原生可迭代的那幾種類型。解構可以被用于所有實現了迭代接口(iterable protocol)的對象。
        如下所示,movies包含一個movie對象列表。我們想要解構movies對象的時候,可以獲取到電影的title這個字符串。實現這個操作首先需要自定義一個迭代器:

        const movies = {
         list: [
         { title: "Heat" },
         { title: "Interstellar" },
         ],
         [Symbol.iterator]() {
         let index = 0;
         return {
         next: () => {
         if (index < this.list.length) {
         const value = this.list[index++].title;
         return { value, done: false };
         }
         return { done: true }
         }
         }
         }
        }
        
        const [firstMovieTitle] = movies;
        console.log(firstMovieTitle); //=> 'Heat'

        movies對象通過定義Symbol.iterator方法實現了一個迭代器。這個迭代器可以迭代所有電影的title屬性。

        我們在movies對象上遵循了迭代接口實現,從而實現了通過解構movies來獲取到標題,比如我們獲取第一個電影的標題:const [firstMovieTitle] = movies;

        解構用法的上限就是沒有上限。

        5. 解構動態屬性

        在我的經驗中,解構一個對象的屬性要遠比解構一個數組的情況更多。

        解構對象看起來非常的簡單:

        const movie = { title: "Heat" };
        const { title } = movie;
        title; //=> Heat

        const { title } = movie;創建了一個變量title,然后把movie.title的值賦值給了這個變量。

        當我第一次了解到對象解構的時候,有一點令我驚訝的是你并不需要預先知道屬性的靜態名稱。你可以通過動態屬性名來解構一個對象。

        為了了解動態解構的工作原理,我們來寫一個打招呼的函數作為例子:

        function greet( obj, nameProp ) {
         const { [nameProp]: name="Unknow" } = obj;
         return `Hello, ${name}!`;
        }
        greet({ name: "Batman" }, "name"); //=> Hello, Batman!
        greet( {}, "name" ); //=> Hello, Unknow!

        greet()被調用時需要傳遞兩個參數,一個是對象,一個是屬性名稱。

        在greet()函數內部,解構表達式const { [nameProp]: name="Unknow" } = obj;使用中括號[nameProp]讀取動態屬性的名稱。name變量接收動態屬性的值。

        更好的做法就是你可以指定一個默認的值Unknow以防屬性不存在的情況。

        6. 總結

        解構可以幫助你更方便快捷的訪問對象屬性和數組元素。

        除了基本用法之外,數組解構還可以方便的交換變量,訪問數組元素,做一些遵循不可變原則的操作。

        JavaScript提供了更多的可能性,因為你可以通過擴展迭代器實現自定義的解構邏輯。

        好了,

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        關于JS解構的5種有趣用法

        關于JS解構的5種有趣用法:前言 原文標題:5 Interesting Uses of JavaScript Destructuring 原文鏈接:dmitripavlutin.com/5-interesti… 定期回顧我寫的JS代碼,我發現解構運算無處不在。 獲取對象的屬性和訪問數組內容是都是很常用的操作。而解構運算使得這些操作變得非常簡單明了
        推薦度:
        標簽: 幾個 用法 js
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲精品乱码久久久久久蜜桃不卡 | 亚洲人成网亚洲欧洲无码久久| 三上悠亚在线观看免费| 亚洲一区二区三区首页| 黄a大片av永久免费| 美女被免费网站91色| 亚洲精品午夜在线观看| 免费国产高清视频| 久久久久久成人毛片免费看| 亚洲另类无码专区首页| 亚洲熟妇丰满多毛XXXX| 成年性羞羞视频免费观看无限| 美女露100%胸无遮挡免费观看| 亚洲视频.com| 亚洲AV成人精品日韩一区18p| 一个人免费视频观看在线www | 亚洲大成色www永久网站| 成人黄软件网18免费下载成人黄18免费视频 | 美女网站免费福利视频| 一级特黄aaa大片免费看| 亚洲国产精品yw在线观看| 一本色道久久综合亚洲精品高清| 无码中文字幕av免费放| 国产午夜精品理论片免费观看 | 免费精品国产日韩热久久| 美女巨胸喷奶水视频www免费| 亚洲国产熟亚洲女视频| 久久精品国产亚洲av麻| 免费一区二区三区四区五区| 亚洲一区二区免费视频| 免费无码又爽又刺激网站直播| 美女视频黄a视频全免费网站色| 亚洲国产精品成人综合久久久 | 亚洲综合一区二区三区四区五区| 亚洲va久久久噜噜噜久久狠狠 | 免费理论片51人人看电影| 最近中文字幕国语免费完整 | 久久99毛片免费观看不卡| 日本免费精品一区二区三区| 亚洲一区二区三区丝袜| 亚洲不卡在线观看|