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