JavaScript中運(yùn)算符與數(shù)組擴(kuò)展詳細(xì)講解
運(yùn)算符
擴(kuò)展運(yùn)算符
擴(kuò)展運(yùn)算符是三個(gè)點(diǎn)(...),和rest參數(shù)的逆運(yùn)算一樣,將一個(gè)數(shù)組轉(zhuǎn)為用逗號(hào)分隔的參數(shù)序列。
<script>
// ... 擴(kuò)展運(yùn)算符能將 數(shù)組 轉(zhuǎn)換為逗號(hào)分隔的 參數(shù)序列
const boys = ['張三','李四','王五']
// 聲明一個(gè)函數(shù)
function people(){
console.log(arguments);
}
people(...boys)//['張三','李四','王五']
</script>數(shù)組合并操作如下:
<script>
// 數(shù)組的合并
const number = [1,2,3]
const str = ['a','b','c']
const con = [...number,...str]
console.log(con); //[1,2,3,'a','b','c']
</script>數(shù)組克隆操作如下:
<script>
// 數(shù)組的克隆
const a = [1,2,3]
const b = [...a]
console.log(a); //[1,2,3]
</script>將偽數(shù)組轉(zhuǎn)為真正的數(shù)組操作如下:
<body>
<div></div>
<div></div>
<div></div>
<script>
// 將偽數(shù)組轉(zhuǎn)為真正的數(shù)組
const divs = document.querySelectorAll('div')
const divArr = [...divs]
console.log(divArr); //[div,div,div]
</script>
</body>指數(shù)運(yùn)算符
指數(shù)運(yùn)算符的特點(diǎn)是右結(jié)合,而不是左結(jié)合,多個(gè)指數(shù)運(yùn)算符連用時(shí),從最右邊開始計(jì)算:
<script>
// ES新增了指數(shù)運(yùn)算符 (**)
var x = 2 ** 2//相當(dāng)于2的平方
var y = 2 ** 3//相當(dāng)于2的立方
console.log(x);//4
console.log(y);//8
var z = 2 ** 2 ** 4//相當(dāng)于 2 ** ( 2 ** 4 )
console.log(z);//65536
</script>指數(shù)運(yùn)算符也可以與等號(hào)結(jié)合使用,形成一個(gè)新的賦值運(yùn)算符 (**=)。
<script>
var x = 2
x**=2//x=x*x
console.log(x);//4
var y = 2
y**=3//y=y*y*y
console.log(y);//8
</script>鏈判斷運(yùn)算符
鏈判斷運(yùn)算符的符號(hào)為:?. ,?.運(yùn)算符相當(dāng)于一種短路機(jī)制,只要不滿足條件就不再往下執(zhí)行。
<script>
// a?.[++x] 等同于 a == null ? undefined : a[++x]
var a = true
var x = 1
console.log(a?.[++x] === (a == null ? undefined : a[++x]));//true
</script>如果屬性鏈有括號(hào) ,鏈判斷運(yùn)算符對(duì)括號(hào)外部沒有影響,只對(duì)圓括號(hào)內(nèi)部有影響。
(a?.b).c 等同于 (a == null ? undefined : a.b).c
Null判斷運(yùn)算符
Null判斷運(yùn)算符 符號(hào)為:??,它的行為類似于 ||,但只有運(yùn)算符左側(cè)的值為 null 或 undefined 時(shí),才會(huì)返回右側(cè)的值。
<script>
console.log(null ?? 'a');//a
</script>?? 本質(zhì)上是邏輯運(yùn)算,它與其它兩個(gè)邏輯運(yùn)算符 && 和 || 有一個(gè)優(yōu)先級(jí)問(wèn)題, 優(yōu)先級(jí)的不同,往往會(huì)導(dǎo)致邏輯運(yùn)算的結(jié)果不同,如果多個(gè)邏輯運(yùn)算符一起使用,必須用括號(hào)表明優(yōu)先級(jí),否則會(huì)報(bào)錯(cuò)。
a && b ?? c//報(bào)錯(cuò)
(a && b) ?? c//不報(bào)錯(cuò)
這個(gè)運(yùn)算符的目的就是跟鏈判斷運(yùn)算符 ?. ,配合使用,為 null 或 undefined 的值設(shè)置默認(rèn)值。
邏輯賦值運(yùn)算符
邏輯賦值運(yùn)算符,將邏輯運(yùn)算符與賦值運(yùn)算符進(jìn)行結(jié)合,先進(jìn)行邏輯運(yùn)算,然后根據(jù)運(yùn)算結(jié)果再視情況進(jìn)行賦值運(yùn)算:
<script>
var x = 1
var y = 2
// 或賦值運(yùn)算符
console.log((x ||= y) === (x || (x = y)));//true
// 與賦值運(yùn)算符
console.log((x &&= y) === (x && (x = y)));//true
// Null 賦值運(yùn)算符
console.log((x ??= y) === (x ?? (x = y)));//true
</script>數(shù)組擴(kuò)展方法
Array.from()
用于將兩類對(duì)象轉(zhuǎn)換為數(shù)組:類似數(shù)組對(duì)象的和可遍歷對(duì)象。
<script>
// 類似數(shù)組對(duì)象,本質(zhì)特征只有一點(diǎn),必須有l(wèi)ength屬性
let array = {
'0':'a',
'1':'b',
'2':'c',
length:3 // 長(zhǎng)度必須要寫的
}
let arr2 = Array.from(array)
console.log(arr2);//['a', 'b', 'c']
console.log(Array.from({ length: 3 }))
// [ undefined, undefined, undefined ]
</script>如果參數(shù)是一個(gè)真正的數(shù)組,返回的是一樣的數(shù)組。
<script>
console.log(Array.from([1,2,3]));//[1,2,3]
</script>如果參數(shù)是一個(gè)字符串,則會(huì)將字符串轉(zhuǎn)換為數(shù)組。
<script>
let str = 'hello'
console.log(Array.from(str));//['h', 'e', 'l', 'l', 'o']
</script>Array.of()
用于將一組值轉(zhuǎn)換為數(shù)組。
<script>
console.log(Array.of(1,2,3,4,5,6));//[1, 2, 3, 4, 5, 6]
console.log(Array.of(1));//[1]
console.log(Array.of(2).length);//1
// 如果沒有參數(shù),就返回一個(gè)空數(shù)組。
console.log(Array.of());//[]
</script>copyWithin()
在當(dāng)前數(shù)組內(nèi)部,將指定位置的成員復(fù)制到其他位置并覆蓋掉原有成員,然后返回當(dāng)前數(shù)組。
該方法接受三個(gè)參數(shù):
target(必須):從該位置開始替換數(shù)據(jù)。如果為負(fù)值,表示倒數(shù)。
start(可選):從該位置開始讀取數(shù)據(jù),默認(rèn)為 0。如果為負(fù)值,表示從末尾開始計(jì)算。
end(可選):到該位置前停止讀取數(shù)據(jù),默認(rèn)等于數(shù)組長(zhǎng)度。如果為負(fù)值,表示從末尾開始計(jì)算。
<script>
var arr = [1,2,3,4,5]
console.log(arr.copyWithin(0,3));//[4, 5, 3, 4, 5]
</script>上面代碼表示將從 3 號(hào)位直到數(shù)組結(jié)束的成員(4 和 5),復(fù)制到從 0 號(hào)位開始的位置,結(jié)果覆蓋了原來(lái)的 1 和 2。再以下面兩個(gè)例子舉例:
<script>
var arr = [1,2,3,4,5]
// 將3號(hào)位復(fù)制到0號(hào)位
console.log(arr.copyWithin(0,3,4));
// -2相當(dāng)于3號(hào)位,-1相當(dāng)于4號(hào)位
console.log(arr.copyWithin(0,-2,-1));
</script>find()
數(shù)組find()方法,用于找出第一個(gè)符合條件的數(shù)組成員。由find()衍生了和它類似的方法,如下:findIndex()、findLast()、findLastIndex()。
<script>
var arr = [1,3,5,6,8,4]
// find() 方法調(diào)函數(shù)可以接受三個(gè)參數(shù),依次為當(dāng)前的值、當(dāng)前的位置和原數(shù)組。
var result = arr.find((value,index,arr)=> value > 7)
console.log(result);//結(jié)果輸出當(dāng)前的值
// findIndex() 方法與find() 方法類似,區(qū)別是返回位置而不是結(jié)果
var result1 = arr.findIndex((value,index,arr)=> value > 3)
console.log(result1);//結(jié)果輸出符合的條件的第一個(gè)位置
// findLast() 和 findLastIndex() 和上面兩者類似,只不過(guò)是從數(shù)組末尾往前查找
var result2 = arr.findLast((value,index,arr)=> value ==8)
var result3 = arr.findLastIndex((value,index,arr)=> value ==8)
console.log(result2);//結(jié)果為 8
console.log(result3);//結(jié)果為8 的下標(biāo) 4
</script>fill()
數(shù)組fill()方法,將給定值將數(shù)組內(nèi)容全部覆蓋或者局部覆蓋。
<script>
var arr = ['a','b','c']
// 將數(shù)組內(nèi)容全部覆蓋。
console.log(arr.fill(2));//[2, 2, 2]
var arr1 = ['a','b','c','d']
// 將數(shù)組內(nèi)容局部覆蓋,參數(shù)2是起始位置,參數(shù)3是終止位置,即將數(shù)組下標(biāo)為1的數(shù)替換為2
console.log(arr1.fill(8,1,2));//['a', 8, 'c', 'd']
</script>flat()
數(shù)組flat()方法,用于將嵌套的數(shù)組拉平,變成一維的數(shù)組,該方法返回一個(gè)新數(shù)組,對(duì)原數(shù)組沒有影響,簡(jiǎn)單說(shuō)就是將數(shù)組中的數(shù)組拆解插入到當(dāng)前它所在的位置。
<script>
var arr = [1,2,[3,4],[5,6,[7,8]]]
console.log(arr.flat());
</script>
到此這篇關(guān)于JavaScript中運(yùn)算符與數(shù)組擴(kuò)展詳細(xì)講解的文章就介紹到這了,更多相關(guān)JS運(yùn)算符與數(shù)組擴(kuò)展內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- js如何找出兩個(gè)數(shù)組中不同的元素
- JavaScript數(shù)組filter方法
- js深度合并兩個(gè)數(shù)組對(duì)象的實(shí)現(xiàn)
- JavaScript實(shí)現(xiàn)數(shù)組去重的十種方法分享
- JavaScript中數(shù)組隨機(jī)排序的實(shí)現(xiàn)詳解
- JavaScript數(shù)組合并的8種常見方法小結(jié)
- JavaScript高階API數(shù)組reduce函數(shù)使用示例
- JS數(shù)組操作大全對(duì)象數(shù)組根據(jù)某個(gè)相同的字段分組
- Java?從json提取數(shù)組并轉(zhuǎn)換為list的操作方法
- js對(duì)象合并的4種方式與數(shù)組合并的4種方式
- 27個(gè)JavaScript數(shù)組常見方法匯總與實(shí)例說(shuō)明
相關(guān)文章
javascript中日期函數(shù)new Date()的瀏覽器兼容性問(wèn)題
這篇文章主要介紹了javascript中日期函數(shù)new Date()的瀏覽器兼容性問(wèn)題,需要的朋友可以參考下2015-09-09
JavaScript實(shí)現(xiàn)隨機(jī)生成驗(yàn)證碼及校驗(yàn)
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)隨機(jī)生成驗(yàn)證碼及校驗(yàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06
js中數(shù)組解構(gòu)與對(duì)象解構(gòu)示例代碼
數(shù)組解構(gòu)是一種在 JavaScript 中從數(shù)組中提取值并將它們分配給變量的方式,在數(shù)組解構(gòu)中分為完全解構(gòu),不完全解構(gòu),解構(gòu)失敗以及解構(gòu)默認(rèn)值,這篇文章主要介紹了js中數(shù)組解構(gòu)與對(duì)象解構(gòu),需要的朋友可以參考下2023-09-09
JS this關(guān)鍵字在ajax中使用出現(xiàn)問(wèn)題解決方案
這篇文章主要介紹了JS this關(guān)鍵字在ajax中使用出現(xiàn)問(wèn)題解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
淺談bootstrap layer.open中end的使用方法
今天小編就為大家分享一篇淺談bootstrap layer.open中end的使用方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09
阻止子元素繼承父元素事件具體思路及實(shí)現(xiàn)
想要阻止點(diǎn)擊#p_cont區(qū)域時(shí)觸發(fā)a事件,需要在#p_cont區(qū)域內(nèi)加入阻止事件冒泡的代碼,具體實(shí)現(xiàn)祥看本文,希望對(duì)你有所幫助2013-05-05
獲取當(dāng)前按鈕或者h(yuǎn)tml的ID名稱實(shí)例(推薦)
下面小編就為大家?guī)?lái)一篇獲取當(dāng)前按鈕或者h(yuǎn)tml的ID名稱實(shí)例(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06

