[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類的理解和使用