[TOC]
>[success] # 扩展运算符
~~~
'不定参数'和'扩展运算符'很相似,前者是把'参数合并成一个数组',后者是把'数组打散成各自独立'
~~~
如下我有想通过`Math`的`max`方法过滤出参数最大的那个值
~~~
let value1 = 25, value2 = 50
console.log(Math.max(value1, value2)) // 50
~~~
现在有一个需求,想通过一个数组,过滤出数组中最大的那个值,但是`max`方法的参数不支持传入数组,该怎么办
>[success] ## ES5将数组打散
~~~
'ES5'通过使用'apply'方法来将'数组打散','apply'方法第一个参数为调用的那个方法的'this',
'apply'方法的第二个参数为'数组',例子如下:
~~~
~~~
let arr = [25, 50, 75, 100]
console.log(Math.max.apply(Math, arr)) // 100
~~~
<br/>
>[success] ## ES6将数组打散
1. 扩展运算符基础功能
~~~
let arr = [25, 50, 75, 100]
console.log(Math.max(...arr)) // 100
~~~
~~~
如果数组是'负数'的情况下,可以为'max'方法设置一个'最小值0'(防止负数偷偷返回)
~~~
~~~
let arr = [-25, -50, -75, -100]
console.log(Math.max(...arr, 0)) // 0
~~~
2. 浅拷贝数组
~~~
2.1
'传统方式':
// 数组1
let arr = [1, 2, 3, 4, 5, 6]
// 数组2
let arr2 = [];
// 浅拷贝数组
arr.forEach(i => arr2.push(i))
// 修改数组1
arr[0] = 222
console.log(arr, 'arr') // [ 222, 2, 3, 4, 5, 6 ]
console.log(arr2, 'arr2') // [ 1, 2, 3, 4, 5, 6 ]
2.2
'ES6扩展运算符方式':
// 数组1
let arr = [1, 2, 3, 4, 5, 6]
// 数组2
let arr2 = [...arr];
// 修改数组1
arr[0] = 222
console.log(arr, 'arr') // [ 222, 2, 3, 4, 5, 6 ]
console.log(arr2, 'arr2') // [ 1, 2, 3, 4, 5, 6 ]
~~~
3. 浅拷贝对象
~~~
3.1
'传统方式':
// 对象1
let obj = {
a: '小明',
b: false
}
// 对象2
let obj2 = {}
// 浅拷贝
for (key in obj) {
obj2[key] = obj[key]
}
// 修改对象1
obj['b'] = true
console.log(obj)
console.log(obj2)
3.2
'ES6扩展运算符方式':
// 对象1
let obj = {
a: '小明',
b: false
}
// 对象2
let obj2 = { ...obj }
// 修改对象1
obj['b'] = true
console.log(obj)
console.log(obj2)
~~~
- Javascript基础篇
- Array数组
- 数组插入值
- filter()
- forEach()
- push()
- pop()
- unshift()
- shift()
- valueOf()
- 面向对象思想
- Javascript 面向对象编程(一):封装
- Javascript面向对象编程(二):构造函数的继承
- Javascript面向对象编程(三):非构造函数的继承
- 解构
- 数组的解构赋值
- 对象的解构赋值
- 函数参数解构
- 字符串的解构赋值
- 数值和布尔值的解构赋值
- 圆括号问题
- 字符串.
- split()
- charAt()
- charCodeAt()
- concat()
- indexOf()
- lastIndexOf()
- match()
- replace()
- includes()
- 初识递归
- 渲染ul-li树形结构
- 异步函数解决方案
- 1. callback回调函数
- 2. ES6 - Promise
- JavaScript高级程序设计(书)
- 在html中使用JavaScript
- script标签的位置
- 延迟脚本
- 异步脚本
- <noscript>元素
- 基本概念
- 严格模式
- 变量详解
- 数据类型
- typeof操作符
- undefined类型
- Null类型
- Boolean类型
- Number类型
- 深入了解ES6(书)
- var 、let 、 const
- 字符串与正则表达式
- 字符串
- 正则表达式
- 函数
- 函数形参默认值
- 使用不具名参数
- 函数构造器的增强能力
- 扩展运算符
- name属性
- 明确函数的多重用途
- 块级函数
- 箭头函数
- 尾调用优化
- 扩展的对象功能
- 对象类别
- 对象字面量语法的扩展
- ES6对象新增方法
- 重复的对象属性
- 自有属性的枚举顺序
- 更强大的原型
- 解构:更方便的数据访问
- 为什么要用解构?
- 对象解构
- 数组解构
- 混合解构
- 参数解构
- Symbol与Symbol属性
- 创建Symbol
- Symbol的使用方法
- Symbol全局私有属性
- Symbol与类型强制转换
- Symbol属性检索
- Symbol的一些构造方法
- Set集合与Map集合
- Set集合
- Weak Set集合(弱引用Set集合)
- Map集合
- JS标准内置对象
- Object 构造函数及属性
- Object 构造方法
- Symbol 内建对象类的函数及属性
- Set 构造函数及属性
- Weak Set 构造函数及属性
- JS杂项
- 类数组对象
- Class类的理解和使用