摘要:該方法可以將類(lèi)數(shù)組對(duì)象轉(zhuǎn)換為數(shù)組,所謂類(lèi)數(shù)組對(duì)象,就是含和索引屬性的對(duì)象返回的數(shù)組長(zhǎng)度取決于對(duì)象屬性的值,且非索引屬性的值,或索引大于的值都不會(huì)被返回到數(shù)組中實(shí)錘如下簡(jiǎn)潔寫(xiě)法該方法可以將類(lèi)數(shù)組對(duì)象和可迭代對(duì)象轉(zhuǎn)換為數(shù)組類(lèi)數(shù)組對(duì)象上文已提及,
Array.prototype.slice.call(obj)
該方法可以將類(lèi)數(shù)組對(duì)象轉(zhuǎn)換為數(shù)組,所謂類(lèi)數(shù)組對(duì)象,就是含 length 和索引屬性的對(duì)象
返回的數(shù)組長(zhǎng)度取決于對(duì)象 length 屬性的值,且非索引屬性的值,或索引大于 length 的值都不會(huì)被返回到數(shù)組中
實(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]
簡(jiǎn)潔寫(xiě)法 [].slice.call(obj)
Array.from(obj)該方法可以將類(lèi)數(shù)組對(duì)象和可迭代對(duì)象轉(zhuǎn)換為數(shù)組
類(lèi)數(shù)組對(duì)象上文已提及,何為可迭代對(duì)象?
Array、Set、Map 和字符串都是可迭代對(duì)象(WeakMap/WeakSet 并不是可迭代對(duì)象)
字符串變成了可迭代對(duì)象,解決了編碼的問(wèn)題
這些對(duì)象都有默認(rèn)的迭代器,即具有 Symbol.iterator 屬性
可以用 for of 循環(huán)
所有通過(guò)生成器創(chuàng)建的迭代器都是可迭代對(duì)象
document.getElementsByTagName("div") 返回的是可迭代對(duì)象但不是一個(gè)數(shù)組
Array.isArray(document.getElementsByTagName("div")) 返回 false
通過(guò)生成器創(chuàng)建可迭代對(duì)象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]改造對(duì)象本身,使其成為可迭代對(duì)象
默認(rèn)情況下,開(kāi)發(fā)者定義的對(duì)象都是不可迭代對(duì)象,但如果給 Symbol.iterator 屬性添加一個(gè)生成器,則可以將其變?yōu)榭傻鷮?duì)象
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]判斷對(duì)象是否為可迭代對(duì)象的方法
typeof obj[Symbol.iterator] === "function"一點(diǎn)延伸 for of 與 forEach 與 for in
for of 用于循環(huán)可迭代對(duì)象,包括有 Array, Set, Map, 字符串
而 Array, Set, Map 都有 forEach 方法
另外,NodeList 不是 Array, Set, Map,但是一個(gè)可迭代對(duì)象,可以用 for of 遍歷
此外,用 for of 循環(huán)對(duì)象時(shí)可以通過(guò) break 提前終止,而 forEach 無(wú)法提前跳出循環(huán)
for in 遍歷對(duì)象的可枚舉屬性,包括其原型鏈上的屬性,且不保證順序
若要遍歷對(duì)象自身的可枚舉屬性,使用 hasOwnProperty() 方法來(lái)確定屬性是否時(shí)對(duì)象自身屬性
Object.getOwnPropertyNames(obj), 返回對(duì)象自身可枚舉或不可枚舉屬性
反正已經(jīng)扯遠(yuǎn)了,那就再扯遠(yuǎn)一點(diǎn), Object.assign() 方法將所有可枚舉屬性的值從一個(gè)或多個(gè)源對(duì)象復(fù)制到目標(biāo)對(duì)象
[…obj]展開(kāi)運(yùn)算符可以將可迭代對(duì)象轉(zhuǎn)換為數(shù)組
例如,[..."obj"] 返回 ["o", "b", "j"]
字符串去重
[...new Set("objobj")]
Object.values(obj)默認(rèn)情況下,開(kāi)發(fā)者定義的對(duì)象都是不可迭代對(duì)象,但提供了返回迭代器的方法
entries()
values()
keys()
通過(guò)使用這些方法,可以返回相關(guān)的數(shù)組
與類(lèi)數(shù)組對(duì)象需要對(duì)象有 length 值不同,Object.values(obj) 返回對(duì)象自身可枚舉屬性值的集合
let obj = { "0": 3, "1": 13, "2": 23, "3": 33 } let arr = Object.values(obj) // [3, 13, 23, 33]字符串與數(shù)組的關(guān)系
在很大程度上,可以將字符串看成字符串?dāng)?shù)組,
都有 length 屬性
都有 concat() / indexOf() / includes() / slice() 方法
不過(guò)值得注意的是, string 上沒(méi)有方法可以原地修改它自身的內(nèi)容,都是返回新的 string
string 還有個(gè) repeat() 方法,創(chuàng)建指定數(shù)量的字符串副本
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/93212.html
摘要:新手經(jīng)常犯的一個(gè)錯(cuò)誤是將一個(gè)方法從對(duì)象中拿出來(lái),然后再調(diào)用,希望方法中的是原來(lái)的對(duì)象。如果不做特殊處理的話(huà),一般會(huì)丟失原來(lái)的對(duì)象。 call、apply、bind是JavaScript中Function函數(shù)自帶的方法,主要用于改變this的指向 區(qū)別: call() 1.語(yǔ)法: fun.call(this, arg1,arg2) 2.this取值的幾點(diǎn)說(shuō)明: (1)處于非嚴(yán)格模式下,...
摘要:類(lèi)似的情況還有,方法和方法等。今天我說(shuō)一個(gè)最簡(jiǎn)單。代碼如下和也可以實(shí)現(xiàn),但是生成的是一個(gè)整數(shù),如下分割線其它類(lèi)型數(shù)據(jù)轉(zhuǎn)布爾數(shù)據(jù)下面的轉(zhuǎn)換,大家一看就明白了,不多說(shuō)。緩存變量循環(huán)緩存分割線第一段就是每一次循環(huán)的時(shí)候,都要查詢(xún)一次。 1.前言 從大學(xué)到現(xiàn)在,接觸前端已經(jīng)有幾年了,感想方面,就是對(duì)于程序員而言,想要提高自己的技術(shù)水平和編寫(xiě)易于閱讀和維護(hù)的代碼,我覺(jué)得不能每天都是平庸的寫(xiě)代碼,...
摘要:代碼實(shí)現(xiàn)測(cè)試代碼輸出解析標(biāo)簽表達(dá)式基礎(chǔ)的表達(dá)式解析實(shí)現(xiàn)了,針對(duì)我們的標(biāo)簽表達(dá)式多個(gè)字符組成一個(gè)標(biāo)簽,以及去掉,加上的邏輯,稍作修改測(cè)試代碼輸出后綴表達(dá)式轉(zhuǎn)二叉樹(shù)分析根據(jù)后綴表達(dá)式的含義,符合表示前面兩個(gè)元素的運(yùn)算。用戶(hù)標(biāo)簽是個(gè)數(shù)組。 一、概述 標(biāo)簽是精細(xì)化運(yùn)營(yíng)必不可少的工具,常見(jiàn)的使用場(chǎng)景有標(biāo)簽推送,千人千面的廣告展示等。在實(shí)際的業(yè)務(wù)中,標(biāo)簽往往是通過(guò)交并差非運(yùn)算組合在一起使用,比如:...
摘要:正確的解釋是允許在相等比較中進(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)換,而不允許。參考資料小議下字符串比較大小中的強(qiáng)制類(lèi)型轉(zhuǎn)換核心概念類(lèi)型轉(zhuǎn)換對(duì)象和方法隱式類(lèi)型轉(zhuǎn)換小結(jié) 開(kāi)胃菜 先說(shuō)一個(gè)題外話(huà),我在工作中遇到一個(gè)問(wèn)題,需要比較 08:00 和 09:00 的大小,最后我找到三種方法: 在兩個(gè)字符串前后各拼接相同的年月日和秒,拼成完整的時(shí)間格式進(jìn)行比較: var head = 2016-01-01 var fo...
摘要:目錄導(dǎo)語(yǔ)包裝對(duì)象的理解三大包裝對(duì)象的知識(shí)點(diǎn)小結(jié)導(dǎo)語(yǔ)包裝對(duì)象是為了彌補(bǔ)基本數(shù)據(jù)類(lèi)型的非對(duì)象特性而產(chǎn)生的,對(duì)于基本類(lèi)型值而言,本來(lái)是不存在屬性和方法的,但是我們可以在使用字面量創(chuàng)建字符串時(shí),調(diào)用例如的方法,那么其內(nèi)在原理究竟是什么呢閱讀完本篇文 目錄 導(dǎo)語(yǔ) 1. 包裝對(duì)象的理解 2. 三大包裝對(duì)象的知識(shí)點(diǎn) 3. 小結(jié) 導(dǎo)語(yǔ) 包裝對(duì)象是為了彌補(bǔ)基本數(shù)據(jù)類(lèi)型的非對(duì)象特性而產(chǎn)生的,對(duì)于基本類(lèi)型...
閱讀 4068·2021-09-22 15:49
閱讀 3413·2021-09-08 09:35
閱讀 1477·2019-08-30 15:55
閱讀 2382·2019-08-30 15:44
閱讀 775·2019-08-29 16:59
閱讀 1682·2019-08-29 16:16
閱讀 561·2019-08-28 18:06
閱讀 1000·2019-08-27 10:55