千家信息网

JS扩展操作符写法有哪些

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍"JS扩展操作符写法有哪些",在日常操作中,相信很多人在JS扩展操作符写法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"JS扩展操作符写法有哪些"
千家信息网最后更新 2026年11月01日JS扩展操作符写法有哪些

这篇文章主要介绍"JS扩展操作符写法有哪些",在日常操作中,相信很多人在JS扩展操作符写法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"JS扩展操作符写法有哪些"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

1. 字符串转数组

字符串转数组最普遍的做法是这样:

let str = 'hello' let arr = str.split('') console.log(arr)  // ['h', 'e', 'l', 'l', 'o']

而使用了扩展操作符后可以这样:

let str = 'hello' let arr = [...str] console.log(arr)  // ['h', 'e', 'l', 'l', 'o']

2. 将类数组转换为数组

在 JS 中有一种数据结构叫做 NodeList,它和数组很相似,也被叫做"类数组",类数组是什么?在 MDN 中是这么定义它的:

  • "类数组:拥有一个 length 属性和若干索引属性的任意对象。

类数组有哪些呢?以下这些可以看成是类数组:

  • NodeList:document.querySelectorAll() 返回的对象;

  • HTMLCollection:document.getElementsByTagName() 返回的对象;

  • Arguments:函数里的参数对象;

类数组没有数组的一些方法比如 push、map 等,所以经常需要将它们转成数组,而通常我们是这么转化的:

let nodeList = document.querySelectorAll('div') console.log(nodeList instanceof NodeList)  // true  let arr = Array.apply(null, nodeList) console.log(arr instanceof Array)  // true  // 或者 let arr2 = [].slice.call(nodeList) console.log(arr2 instanceof Array)  // true  // 又或者 let arr3 = Array.from(nodeList) console.log(arr3 instanceof Array)  // true

而有了扩展操作符可以这么做:

let nodeList = document.querySelectorAll('div') let arr = [...nodeList] console.log(arr instanceof Array)  // true

3. 向数组中添加项

往数组中添加几项通常这样操作:

let arr = [5]  // 从头部添加 arr.unshift(1, 2) console.log(arr)  // [1, 2, 5]  // 从尾部添加 arr.push(6, 7) console.log(arr)  // [1,2, 5, 6, 7]  // 从任意位置添加 arr.splice(2, 0, 3, 4) console.log(arr)  // [1,2, 3, 4, 5, 6, 7]

使用扩展操作符后:

let arr = [3, 4] arr = [1, 2, ...arr, 5, 6] console.log(arr)  // [1, 2, 3, 4, 5, 6]

4. 拷贝数组和对象

通常拷贝一个数组,可以这么做:

let arr = [1, 3, 5, 7] let arr2 = arr.concat()  // 或者 let arr3 = arr.slice() arr[0] = 2 console.log(arr)   // [2, 3, 5, 7] console.log(arr2)  // [1, 3, 5, 7] console.log(arr3)  // [1, 3, 5, 7]

但是有了扩展操作符,拷贝数组就能写得很简单:

let arr = [1, 3, 5, 7] let arr2 = [...arr] arr[0] = 2 console.log(arr2)  // [1, 3, 5, 7]

同样的,扩展操作符还能拷贝对象。拷贝对象的通常做法:

let person = { name: '布兰', age: 12} let p2 = Object.assign({}, person) person.age = 20 console.log(person)  // { name: '布兰', age: 20 } console.log(p2)      // { name: '布兰', age: 12 }

有了扩展操作符,拷贝一个对象就相当方便了:

let person = { name: '布兰', age: 12 } let p2 = {...person} person.age = 20 console.log(person)  // { name: '布兰', age: 20 } console.log(p2)      // { name: '布兰', age: 12 }  // 甚至还可以这么写 let {...p3} = person
  • "注意:扩展操作符只能深拷贝结构为一层的对象,如果对象是两层的结构,那么使用扩展操作符拷贝会是浅拷贝。

5. 合并数组或对象

数组合并通常是这么做的:

let arr1 = [1, 3, 5] let arr2 = [2, 4, 6] let arr3 = arr1.concat( arr2 ) console.log(arr3)  // [1, 3, 5, 2, 4, 6]

使用扩展操作符后,可以这么写:

let arr1 = [1, 3, 5] let arr2 = [2, 4, 6] let arr3 = [...arr1, ...arr2] console.log(arr3)  // [1, 3, 5, 2, 4, 6]

对了,它除了能合并数组外还能合并对象呢。合并对象,通常的做法是:

let p1 = { name: '布兰' } let p2 = { age: 12 } let p3 = Object.assign({}, p1, p2) console.log(p3)  // { name: '布兰', age: 12}

用扩展操作符合并对象:

let p1 = { name: '布兰' } let p2 = { age: 12 } let p3 = { ...p1, ...p2 } console.log(p3)  // { name: '布兰', age: 12}

6. 解构对象

经常我们给对象设置参数的时候会这么做:

let person = {     name: '布兰',     age: 12,     sex: 'male' } let name = person.name let age = person.age let sex = person.sex

而有了扩展操作符,我们就可以这么写,不过其实如下这种写法并不是扩展操作符的写法?,而是剩余操作符的写法,虽然写出来后看起来差不多,但就在操作对象这一点上,基本上可以认为它和扩展操作符是相反的操作,扩展操作符是用来展开对象的属性到多个变量上,而剩余操作符是用来把多个参数凝聚到一个变量上。

let person = {     name: '布兰',     age: 12,     sex: 'male' } let { name, ...reset } = person console.log(name)   // '布兰' console.log(reset)  // { age: 12, sex: 'male' }

7. 给对象添加属性

给对象加属性通常这样加:

let person = { name: '布兰' } person.age = 12 console.log(person)  // { name: '布兰', age: 12 }

使用扩展操作符给对象添加属性:

let person = { name: '布兰' } person = {...person, age: 12} console.log(person)  // { name: '布兰', age: 12 }

关于使用扩展操作符给对象添加属性,这里有 2 个小技巧:

1.给新对象设置默认值:

// 默认 person 对象的 age 属性值 为 12 let person = {age: 12, ...{ name: '布兰' } } console.log(person)  // { age: 12, name: '布兰' }

2.重写对象属性

let person = { name: '布兰', age: 12 }  // person 对象的 age 属性被重写为 20 person = {...person, age: 20 } console.log(person)  // { name: '布兰', age: 20 }

8. 设置对象 Getter

设置对象 Getter 通常做法是这样:

let person = { name: '布兰' } Object.defineProperty(person, 'age', {     get() { return 12 },     enumerable: true,     configurable: true }) console.log(person.age)  // 12

而有了扩展操作符后可以这么写:

let person = { name: '布兰' } person = {     ...person,      get age() { return 12 } } console.log(person.age)  // 12

9. 将数组作为函数参数展开

如果我们有一个形参是多个参数的函数,但是当调用的时候发现入参却是一个数组,常规做法是这样:

let arr = [1, 3, 5] function fn(a, b, c) { }  fn.apply(null, arr)

使用扩展操作符后,就简单多了:

let arr = [1, 3, 5] function fn(a, b, c) { }  fn(...arr)

10. 无限参数的函数

如果有这么一个累加函数,他会把所有传递进来的参数都加起来,普通做法是把参数都整合到数组里,然后这样做:

function doSum(arr) {     return arr.reduce((acc, cur) => acc + cur) } console.log( doSum([1, 3]) )     // 4 console.log( doSum([1, 3, 5]) )  // 9

如果参数不是数组,而是需要一个个传递,相当于函数必须支持无限参数,那可能会这么做:

function doSum() {     let sum = 0     for(let i = 0, l = arguments.length; i < l; i++){         sum += arguments[i]     }     return sum          // 或者     // let args = [].slice.call(arguments)      // return args.reduce((acc, cur) => acc + cur) } console.log( doSum(1, 3) )        // 4 console.log( doSum(1, 3, 5) )     // 9 console.log( doSum(1, 3, 5, 7) )  // 16

而有了扩展操作符,就简单多了:

function doSum(...arr) {     return arr.reduce((acc, cur) => acc + cur) } console.log( doSum(1, 3) )        // 4 console.log( doSum(1, 3, 5) )     // 9 console.log( doSum(1, 3, 5, 7) )  // 16

11. 扩展函数的剩余参数

有的时候一个函数需要传递很多的参数,比如小程序页面(WePY)的 onLoad 生命周期函数里就可能有很多别的页面传递过来的参数,然后还需要在函数里进行一些数据初始化工作,这样一来就会显得很臃肿不美观,比如:

function init(a, b, x, y) {     // 进行一系列初始化数据工作 }

而使用了扩展操作符后,我们就可以按照业务把参数进行解构,把本该在一个函数里进行初始化的工作拆分成多个,可以这么做:

function other( x, y ) {} function init(a, b, ...restConfig) {     // 使用 a 和 b 参数进行操作     // 其余参数传给原始函数     return other( ...restConfig ) }

12. 结合 Math 函数使用

比如当需要对一个数组求最大值的时候,通常会这么做:

let arr = [3, 1, 8, 5, 4] function max(arr) {     return [].concat(arr).sort((a, b) => b - a) } console.log(max(arr)[0])  // 8  // 或者 arr.reduce((acc, cur) => Math.max(acc, cur))  // 8  // 又或者 Math.max.apply(null, arr)  // 8

但是使用扩展操作符后,能够把给数组求最大值写得更加简洁:

let arr = [3, 1, 8, 5, 4] let max = Math.max(...arr) console.log(max)  // 8

13. 在 new 表达式中使用

假设有一个数组格式的日期,想要通过 Date 构造函数创建一个日期实例的话,可能会这么做:

let arr = [2021, 1, 1] let date = new Date([].toString.call(arr)) console.log(date)  // 'Mon Feb 01 2021 00:00:00 GMT+0800 (中国标准时间)'  // 或者 let date2 = new (Function.prototype.bind.apply(     Date,      [null].concat(arr) )) console.log(date2)  // 'Mon Feb 01 2021 00:00:00 GMT+0800 (中国标准时间)'

而有了扩展操作符就简单多了:

let arr = [2021, 1, 1] let date = new Date(...arr) console.log(date)  // 'Mon Feb 01 2021 00:00:00 GMT+0800 (中国标准时间)'

到此,关于"JS扩展操作符写法有哪些"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

操作符 对象 数组 布兰 参数 函数 属性 拷贝 写法 做法 多个 时候 学习 数据 标准 标准时 结构 中国 剩余 工作 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 科技互联网企业 互联网和科技创新 腾讯阿里互联网科技 青岛互联网科技公司 互联网科技排名 融贸通互联网科技 多迪互联网科技有限公司 互联网巨头投资的硬核科技 恒生科技互联网指数分析 互联网科技公司的市场部门 团飞科技与伯堂互联网服务平台 互联网金融中的现代科技 移动互联网年度科技创新 小米互联网科技园入驻 互联网领先科技宣传片 江苏互联网科技小贷 2021世界互联网领先科技成果发布 新氧科技和美国互联网有关系吗 容联科技互联网电商 互联网科技职业技能培训学校 苏州找大状互联网科技有限公司 盈实互联网科技 易互联网科技有限公司 中国 科技 互联网 上海万想互联网科技 玖二柒互联网科技公司待遇 济南华为互联网科技产业总部基地 互联网科技实习生岗位职责 浙南科技城互联网大厦建设工程 广州全民伙伴互联网科技有限公司
0