国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

JS從非數(shù)組對象轉(zhuǎn)數(shù)組的方法小結(jié)

2024-05-06 15:20:24
字體:
供稿:網(wǎng)友

前言

本文主要匯總了一些JS從非數(shù)組對象轉(zhuǎn)數(shù)組的方法,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細(xì)的介紹吧。

Array.prototype.slice.call(obj)

該方法可以將類數(shù)組對象轉(zhuǎn)換為數(shù)組,所謂類數(shù)組對象,就是含 length 和索引屬性的對象

返回的數(shù)組長度取決于對象 length 屬性的值,且非索引屬性的值,或索引大于 length 的值都不會被返回到數(shù)組中

實錘如下

let obj = { '0': 3, '1': 13, '2': 23, '3': 33, 'length': 3, 'name': 330}let arr = Array.prototype.slice.call(obj)// [3, 13, 23]

簡潔寫法 [].slice.call(obj)

Array.from(obj)

該方法可以將類數(shù)組對象和可迭代對象轉(zhuǎn)換為數(shù)組

類數(shù)組對象上文已提及,何為可迭代對象?

Array、Set、Map 和字符串都是可迭代對象(WeakMap/WeakSet 并不是可迭代對象) 字符串變成了可迭代對象,解決了編碼的問題 這些對象都有默認(rèn)的迭代器,即具有 Symbol.iterator 屬性 可以用 for of 循環(huán) 所有通過生成器創(chuàng)建的迭代器都是可迭代對象 document.getElementsByTagName("div") 返回的是可迭代對象但不是一個數(shù)組
Array.isArray(document.getElementsByTagName('div')) 返回 false

通過生成器創(chuàng)建可迭代對象

let obj = { '0': 3, '1': 13, '2': 23, '3': 33}function *createIterator(obj){ for(let value in obj){  yield obj[value] }}let iterator = createIterator(obj)let arr = Array.from(iterator)// [3, 13, 23, 33]

改造對象本身,使其成為可迭代對象

默認(rèn)情況下,開發(fā)者定義的對象都是不可迭代對象,但如果給 Symbol.iterator 屬性添加一個生成器,則可以將其變?yōu)榭傻鷮ο?/p>

let obj = { '0': 3, '1': 13, '2': 23, '3': 33}obj[Symbol.iterator] = function* () { for(let value in this){  yield this[value] }}let arr = Array.from(obj)// [3, 13, 23, 33]

判斷對象是否為可迭代對象的方法

typeof obj[Symbol.iterator] === 'function'

一點延伸 for of 與 forEach 與 for in

for of 用于循環(huán)可迭代對象,包括有 Array, Set, Map, 字符串

而 Array, Set, Map 都有 forEach 方法

另外,NodeList 不是 Array, Set, Map,但是一個可迭代對象,可以用 for of 遍歷

此外,用 for of 循環(huán)對象時可以通過 break 提前終止,而 forEach 無法提前跳出循環(huán)

for in 遍歷對象的可枚舉屬性,包括其原型鏈上的屬性,且不保證順序

若要遍歷對象自身的可枚舉屬性,使用 hasOwnProperty() 方法來確定屬性是否時對象自身屬性

Object.getOwnPropertyNames(obj) , 返回對象自身可枚舉或不可枚舉屬性

反正已經(jīng)扯遠(yuǎn)了,那就再扯遠(yuǎn)一點,

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 息烽县| 蒙城县| 长治市| 贵定县| 香格里拉县| 万宁市| 四子王旗| 乌兰察布市| 林甸县| 永昌县| 罗源县| 新乡市| 平昌县| 澄城县| 大港区| 康乐县| 苍梧县| 上饶县| 辽阳县| 仙桃市| 江门市| 响水县| 马关县| 丘北县| 库尔勒市| 金川县| 尼木县| 社会| 永年县| 霞浦县| 拜泉县| 徐闻县| 封开县| 抚远县| 土默特右旗| 即墨市| 辽宁省| 基隆市| 奉化市| 保德县| 林甸县|