iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > VUE >JS扩展操作符写法有哪些
  • 110
分享到

JS扩展操作符写法有哪些

2024-04-02 19:04:59 110人浏览 薄情痞子
摘要

这篇文章主要介绍“js扩展操作符写法有哪些”,在日常操作中,相信很多人在JS扩展操作符写法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”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扩展操作符写法有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: JS扩展操作符写法有哪些

本文链接: https://www.lsjlt.com/news/83978.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JS扩展操作符写法有哪些
    这篇文章主要介绍“JS扩展操作符写法有哪些”,在日常操作中,相信很多人在JS扩展操作符写法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JS扩展操作符写法有哪些”的疑惑...
    99+
    2024-04-02
  • JS中使用扩展运算符的方法有哪些
    本篇内容主要讲解“JS中使用扩展运算符的方法有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JS中使用扩展运算符的方法有哪些”吧!复制数组我们可以使用展开操...
    99+
    2024-04-02
  • js中操作字符串的方法有哪些
    小编给大家分享一下js中操作字符串的方法有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!var a = '世界上最远...
    99+
    2024-04-02
  • JS中强大的操作符有哪些
    本篇内容主要讲解“JS中强大的操作符有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JS中强大的操作符有哪些”吧!1. 数值分割符 _ES2021 引入了数...
    99+
    2024-04-02
  • ES6扩展运算符的使用方法有哪些
    这篇文章主要介绍“ES6扩展运算符的使用方法有哪些”,在日常操作中,相信很多人在ES6扩展运算符的使用方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ES6扩展运算符...
    99+
    2024-04-02
  • 扩展Web表单的JS插件有哪些
    这篇文章主要介绍扩展Web表单的JS插件有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!JCF Forms我最喜欢的一款js表单插件是 PSD2HTML 上的 JCF Forms...
    99+
    2024-04-02
  • JS常见的API扩展形式有哪些
    本文小编为大家详细介绍“JS常见的API扩展形式有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“JS常见的API扩展形式有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。...
    99+
    2024-04-02
  • 字符串有哪些操作方法
    小编给大家分享一下字符串有哪些操作方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!字符串属性和方法字符串用于表示和操作字符序列...
    99+
    2024-04-02
  • JS数组的操作方法有哪些
    本文小编为大家详细介绍“JS数组的操作方法有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“JS数组的操作方法有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1.数组的创...
    99+
    2024-04-02
  • PLSQL操作符有哪些
    这篇“PLSQL操作符有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“PLSQL操作符...
    99+
    2024-04-02
  • VB.NET操作符有哪些
    这篇文章主要为大家展示了“VB.NET操作符有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“VB.NET操作符有哪些”这篇文章吧。在本文中将会用到一个自定义类dog ,代码如下:Public...
    99+
    2023-06-17
  • c++操作符有哪些
    c++ 提供广泛的运算符集,分类如下:算术运算符(+、-、*、/、%、++、--)赋值运算符(=、+=、-=、*=、/=、%=)比较运算符(==、!=、、=)逻辑运算符(&、|、...
    99+
    2024-04-22
    c++
  • Laravel Carbon扩展包的作用有哪些
    这篇文章主要讲解了“Laravel Carbon扩展包的作用有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Laravel Carbon扩展包的作用有哪些”吧!   ...
    99+
    2023-06-25
  • word扩展名有哪些
    本篇内容主要讲解“word扩展名有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“word扩展名有哪些”吧!word扩展名:word文件的扩展名是“dox或docx”。如果你要查看看就可以选择...
    99+
    2023-07-01
  • JavaScript扩展运算符的简写方法
    这篇文章主要介绍JavaScript扩展运算符的简写方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!扩展运算符简写扩展运算符有几种用例让JavaScript代码更加有效使用,可以用来代替某个数组函数。简写:不像co...
    99+
    2023-06-27
  • 常用的JS操作JSON方法有哪些
    这篇文章给大家分享的是有关常用的JS操作JSON方法有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、概要简介JSON(JavaScript Object Notation...
    99+
    2024-04-02
  • 有哪些shell字符串操作方法
    本篇内容主要讲解“有哪些shell字符串操作方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“有哪些shell字符串操作方法”吧!1,取得字符串长度代码如下:string=abc12342341...
    99+
    2023-06-09
  • Python字符串操作方法有哪些
    本篇内容主要讲解“Python字符串操作方法有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python字符串操作方法有哪些”吧!Python字符串中字符大小写的变换: * S.l...
    99+
    2023-06-17
  • es6数值的扩展方法有哪些
    这篇文章将为大家详细讲解有关es6数值的扩展方法有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Number的方法扩展Number.is...
    99+
    2024-04-02
  • php安装扩展的方法有哪些
    安装PHP扩展有以下几种方法:1. 使用操作系统的包管理器安装:大多数Linux发行版都有自己的软件包管理器,可以使用该管理器安装P...
    99+
    2023-10-11
    php
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作