成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

盤點JavaScript中的Iterable Object(可迭代對象)

開發 前端
可迭代(Iterable) 對象是數組的泛化。這個概念是說任何對象都可以被定制為可在 for..of 循環中使用的對象。

一、概念

可迭代(Iterable) 對象是數組的泛化。這個概念是說任何對象都可以被定制為可在 for..of 循環中使用的對象。

數組是可迭代的。但不僅僅是數組,很多其他內建對象也都是可迭代的。

二、通過創建一個對象,就可以輕松地掌握可迭代的概念

1.字符串是可迭代的

數組和字符串是使用最廣泛的內建可迭代對象。

對于一個字符串,for..of 遍歷它的每個字符:

for (let char of "test") {
  // 觸發 4 次,每個字符一次
  alert( char ); // t, then e, then s, then t
}

對于代理對(surrogate pairs),它也能正常工作!

(譯注:這里的代理對也就指的是 UTF-16 的擴展字符)

let str = '????';
for (let char of str) {
    alert( char ); // ??,然后是 ??
}

2. 顯式調用迭代器(如何顯式地使用迭代器?)。

將會采用與 for..of 完全相同的方式遍歷字符串,但使用的是直接調用。這段代碼創建了一個字符串迭代器,并“手動”從中獲取值。       

let str = "Hello"; // 和 for..of 做相同的事// 
            for (let char of str)
                alert(char);
            let iterator = str[Symbol.iterator]();
            while (true) {
                let result = iterator.next();
                if (result.done) break;
                alert(result.value); // 一個接一個地輸出字符
            }

注:

很少需要這樣做,但是比 for..of 給了更多的控制權。例如,可以拆分迭代過程:迭代一部分,然后停止,做一些其他處理,然后再恢復迭代。

3. Array.from

有一個全局方法 Array.from 可以接受一個可迭代或類數組的值,并從中獲取一個“真正的”數組。然后就可以對其調用數組方法了。

例:            

let arrayLike = {
                0: "Hello",
                1: "World",
                length: 2
            };
            let arr = Array.from(arrayLike); // (*)
            alert(arr.pop()); // World(pop 方法有效)// World(pop 方法有效)

運行結果:

在 (*) 行的 Array.from 方法接受對象,檢查它是一個可迭代對象或類數組對象,然后創建一個新數組,并將該對象的所有元素復制到這個新數組。

現在用 Array.from 將一個字符串轉換為單個字符的數組:

let str = '????';// 將 str 拆分為字符數組
let chars = Array.from(str);alert(chars[0]); // ??
alert(chars[1]); // ??
alert(chars.length); // 2

運行結果:

注:

與 str.split 方法不同,它依賴于字符串的可迭代特性。

因此,就像 for..of 一樣,可以正確地處理代理對(surrogate pair)。(譯注:代理對也就是 UTF-16 擴展字符。)

另外一種表達方式

技術上來說,它和下文做了同樣的事:

let str = '????';
let chars = []; // Array.from 內部執行相同的循環
for (let char of str) {  
  chars.push(char);
}
alert(chars);

運行結果:

但 Array.from 精簡很多。

甚至可以基于 Array.from 創建代理感知(surrogate-aware)的slice 方法(譯注:也就是能夠處理 UTF-16 擴展字符的 slice 方法):          

function slice(str, start, end) {
                return Array.from(str).slice(start, end).join('');
            }
            let str = '??????';
            alert(slice(str, 1, 3)); // ????// 原生方法不支持識別代理對(譯注:UTF-16 擴展字符)
            alert(str.slice(1, 3)); // 亂碼(兩個不同 UTF-16 擴展字符碎片拼接的結果)

三、總結

本文基于JavaScript基礎。介紹了Iterable object(可迭代對象),應用 for..of 的對象被稱為 可迭代的。通過創建一個對象,詳細的講解了字符串是可迭代的。顯式調用迭代器,以及在實際中 Array.from的應用。

歡迎大家積極嘗試,有時候看到別人實現起來很簡單,但是到自己動手實現的時候,總會有各種各樣的問題,切勿眼高手低,勤動手,才可以理解的更加深刻。

責任編輯:華軒 來源: 前端進階學習交流
相關推薦

2022-01-15 10:01:15

Javascript 高階函數前端

2021-09-03 10:00:00

JavaScript迭代對象

2021-09-14 07:26:25

JavaScript迭代對象

2024-11-14 13:15:22

JavaScript可迭代數組

2022-10-26 08:25:06

Python編程迭代器

2020-11-24 08:00:22

JavaScript對象迭代器

2022-10-24 13:02:38

2010-10-09 09:56:51

JavaScriptObject對象

2021-11-28 08:03:41

Python迭代器對象

2021-10-09 07:10:31

JavaScript對象Python

2024-03-25 08:57:49

模塊迭代對象迭代器

2021-10-21 18:47:37

JavaScript面向對象

2009-06-09 22:11:44

JavaScriptObject

2021-10-09 07:10:30

JavaScriptBigIn函數

2021-07-20 10:26:12

JavaScriptasyncawait

2024-08-13 15:23:37

2021-08-10 09:57:27

JavaScriptPromise 前端

2012-07-25 13:25:11

ibmdw

2020-08-23 11:32:21

JavaScript開發技術

2021-06-15 10:01:27

JavaScript數組遍歷Entries
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产综合精品一区二区三区 | 成人在线观看免费 | 日韩成人免费视频 | 九九九久久国产免费 | 色综合一区二区三区 | 欧美日韩一区不卡 | 国产美女视频一区 | 在线激情视频 | 亚洲手机视频在线 | 日韩三级视频 | 日韩在线小视频 | 黄色在线观看网站 | 国产高清在线观看 | 黄色电影在线免费观看 | 欧美一区二区三区在线观看 | 国产一区二区三区不卡av | 免费成人在线网站 | 国产精品免费大片 | 亚洲 欧美 日韩在线 | 看一级毛片视频 | 亚洲精品在线免费观看视频 | 91久久伊人| 黑人精品xxx一区一二区 | 97国产超碰| 2018国产大陆天天弄 | 爱草视频| 国产精品成人在线播放 | 一二三在线视频 | japanhd美女动 | 小川阿佐美pgd-606在线 | 久国久产久精永久网页 | 人人九九精 | 亚洲一区二区高清 | 国产一区二区在线免费 | 亚洲午夜精品久久久久久app | 国产a区| 久久午夜精品 | 日韩一二三区 | 在线视频一区二区三区 | 国产色婷婷久久99精品91 | 在线视频一区二区 |