JavaScript运算符与数组扩展详解
本文详细解析JavaScript中的核心运算符与数组扩展方法。涵盖扩展运算符(...)的数组转换与合并、指数运算符(**)的右结合特性、链判断运算符(?.)与Null判断运算符(??)的安全访问机制,以及逻辑赋值运算符。同时深入讲解Array.from、Array.of、copyWithin、find、fill、flat等数组扩展方法的参数与用法。
运算符
扩展运算符
扩展运算符由三个点(...)表示,其功能与rest参数相反,主要用于将数组转换为以逗号分隔的参数序列。
<script>
// ... 扩展运算符能将 数组 转换为逗号分隔的 参数序列
const boys = ['张三','李四','王五']
// 声明一个函数
function people(){
console.log(arguments);
}
people(...boys)//['张三','李四','王五']
</script>数组合并操作如下:
<script>
// 数组的合并
const number = [1,2,3]
const str = ['a','b','c']
const con = [...number,...str]
console.log(con); //[1,2,3,'a','b','c']
</script>数组克隆操作如下:
<script>
// 数组的克隆
const a = [1,2,3]
const b = [...a]
console.log(a); //[1,2,3]
</script>将伪数组转为真正的数组操作如下:
<body>
<div></div>
<div></div>
<div></div>
<script>
// 将伪数组转为真正的数组
const divs = document.querySelectorAll('div')
const divArr = [...divs]
console.log(divArr); //[div,div,div]
</script>
</body>指数运算符
指数运算符具有右结合特性,而非左结合。当连续使用多个指数运算符时,计算顺序从最右侧开始:
<script>
// ES新增了指数运算符 (**)
var x = 2 ** 2//相当于2的平方
var y = 2 ** 3//相当于2的立方
console.log(x);//4
console.log(y);//8
var z = 2 ** 2 ** 4//相当于 2 ** ( 2 ** 4 )
console.log(z);//65536
</script>指数运算符可与等号结合,形成新的赋值运算符(**=)。
<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>链判断运算符
链判断运算符的符号为?.,它提供了一种短路机制,一旦遇到不满足条件的情况,便不再继续执行后续操作。
<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>若属性链包含括号,链判断运算符仅对括号内部生效,不影响括号外部的逻辑。
(a?.b).c 等同于 (a == null ? undefined : a.b).c
Null判断运算符
Null判断运算符符号为??,其行为类似||,但仅在左侧值为null或undefined时,才返回右侧值。
<script>
console.log(null ?? 'a');//a
</script>??本质属于逻辑运算,与其他逻辑运算符&&和||混合使用时存在优先级差异,可能导致结果不同。若多个逻辑运算符同时使用,必须通过括号明确优先级,否则将引发错误。
a && b ?? c//报错 (a && b) ?? c//不报错
该运算符旨在与链判断运算符?.配合使用,为null或undefined的值提供默认值。
逻辑赋值运算符
逻辑赋值运算符将逻辑运算与赋值运算结合,先执行逻辑判断,再根据结果进行赋值:
<script>
var x = 1
var y = 2
// 或赋值运算符
console.log((x ||= y) === (x || (x = y)));//true
// 与赋值运算符
console.log((x &&= y) === (x && (x = y)));//true
// Null 赋值运算符
console.log((x ??= y) === (x ?? (x = y)));//true
</script>数组扩展方法
Array.from()
该方法用于将两类对象转换为数组:类似数组对象和可遍历对象。
<script>
// 类似数组对象,本质特征只有一点,必须有length属性
let array = {
'0':'a',
'1':'b',
'2':'c',
length:3 // 长度必须要写的
}
let arr2 = Array.from(array)
console.log(arr2);//['a', 'b', 'c']
console.log(Array.from({ length: 3 }))
// [ undefined, undefined, undefined ]
</script>若参数为真正的数组,则返回相同的数组。
<script>
console.log(Array.from([1,2,3]));//[1,2,3]
</script>若参数为字符串,则会将字符串转换为字符数组。
<script>
let str = 'hello'
console.log(Array.from(str));//['h', 'e', 'l', 'l', 'o']
</script>Array.of()
用于将一组值转换为数组。
<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
// 如果没有参数,就返回一个空数组。
console.log(Array.of());//[]
</script>copyWithin()
该方法在当前数组内部,将指定位置的成员复制到其他位置并覆盖原有成员,随后返回当前数组。
该方法接受三个参数:
target(必须):指定开始替换数据的位置。若为负值,表示倒数位置。
start(可选):指定开始读取数据的位置,默认为0。若为负值,表示从末尾开始计算。
end(可选):指定停止读取数据的位置,默认等于数组长度。若为负值,表示从末尾开始计算。
<script>
var arr = [1,2,3,4,5]
console.log(arr.copyWithin(0,3));//[4, 5, 3, 4, 5]
</script>上述代码表示将从3号位直到数组结束的成员(4和5),复制到从0号位开始的位置,结果覆盖了原来的1和2。再以下面两个例子举例:
<script>
var arr = [1,2,3,4,5]
// 将3号位复制到0号位
console.log(arr.copyWithin(0,3,4));
// -2相当于3号位,-1相当于4号位
console.log(arr.copyWithin(0,-2,-1));
</script>find()
数组find()方法用于找出第一个符合条件的数组成员。由find()衍生了类似的方法,如下:findIndex()、findLast()、findLastIndex()。
<script>
var arr = [1,3,5,6,8,4]
// find() 方法调函数可以接受三个参数,依次为当前的值、当前的位置和原数组。
var result = arr.find((value,index,arr)=> value > 7)
console.log(result);//结果输出当前的值
// findIndex() 方法与find() 方法类似,区别是返回位置而不是结果
var result1 = arr.findIndex((value,index,arr)=> value > 3)
console.log(result1);//结果输出符合的条件的第一个位置
// findLast() 和 findLastIndex() 和上面两者类似,只不过是从数组末尾往前查找
var result2 = arr.findLast((value,index,arr)=> value ==8)
var result3 = arr.findLastIndex((value,index,arr)=> value ==8)
console.log(result2);//结果为 8
console.log(result3);//结果为8 的下标 4
</script>fill()
数组fill()方法,将给定值将数组内容全部覆盖或者局部覆盖。
<script>
var arr = ['a','b','c']
// 将数组内容全部覆盖。
console.log(arr.fill(2));//[2, 2, 2]
var arr1 = ['a','b','c','d']
// 将数组内容局部覆盖,参数2是起始位置,参数3是终止位置,即将数组下标为1的数替换为2
console.log(arr1.fill(8,1,2));//['a', 8, 'c', 'd']
</script>flat()
数组flat()方法,用于将嵌套的数组拉平,变成一维的数组,该方法返回一个新数组,对原数组没有影响,简单说就是将数组中的数组拆解插入到当前它所在的位置。
<script>
var arr = [1,2,[3,4],[5,6,[7,8]]]
console.log(arr.flat());
</script>
到此这篇关于JavaScript中运算符与数组扩展详细讲解的文章就介绍到这了,更多相关JS运算符与数组扩展内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
怎么用 Promise 封装 JavaScript sleep 函数实现异步延时
2026-11-05 17:49:14
什么时候该用JS构造器:与工厂模式、字面量的选择对比
2026-11-05 16:18:22
推荐几款轻量级JS照片墙开源库及对比
2026-11-05 15:56:19
JavaScript递归写法有哪些常见陷阱及避免方法
2026-11-05 14:53:38
JS数组浅拷贝与深拷贝怎么选?场景与方法总结
2026-11-05 14:41:02
