ES6新特性总结 #131
Anuluca Date : 2021-03-11 Tags : 2
§ let声明变量
- 无法重复声明
- 块级作用域,只有在代码块里有效
- 不存在变量提升
§ const声明常量
- 拥有let的所有特性
- 必须有初始值
- 无法被修改
- 如果是数组或者对象,就可以修改
- 一般常量名用大写
§ 对象解构
1 2 3 4 5 6 7 8 9
| const LUCARIO = { English: 'Lucario', Chinese: '路卡利欧', Japanese: 'ルカリオ' } let {EnglishName, ChineseName, JapaneseName} = LUCARIO console.log('EnglishName',EnglishName) console.log('ChineseName',ChineseName) console.log('JapaneseName',JapaneseName)
|
§ 模版字符串
1 2 3 4
| let temp = 'temp' let str = `<ul> <li>${temp}</li> </ul>`
|
§ 对象简化写法
通常写法:
1 2 3 4 5 6 7 8 9 10 11 12 13
| let name = 'lucario' let move = function(){ console.log("close attack") }
const pokemon = { name:name, move:move, run:function(){ console.log('') } } }
|
简化写法:
1 2 3 4 5 6 7 8 9 10 11 12
| let name = 'lucario' let move = function(){ console.log("close attack") }
const pokemon = { name, move, run(){ console.log('') } }
|
§ 箭头函数
1 2 3
| let fn = function(){ return 'fn' }
|
=
1 2 3
| let fn = () => { return 'fn' }
|
进一步简写:
1 2 3
| let fn = function(a){ return a + a }
|
=
- this是静态的,始终指向函数所在的作用域
- 不能当作构造函数构造对象
- 不能使用arguments变量
§ 函数参数赋初始值
1 2 3
| function(a=3){ return a + a }
|
§ rest参数
用于获取参数的实惨,代替arguments
1 2 3 4
| function date(...args){ console.log(args) } date('火','水','草')
|
§ 【…】扩展运算符
1 2 3 4 5 6 7 8
| const shinjin = ["火","水","草"]
function all(){ console.log(arguments) }
all(shinjin)
|
1 2 3 4 5
| const shinjin = ["火","水","草"] const eliteFour = ["超","毒","斗","龙"]
const shinjinAndElitefour = [...shinjin,...eliteFour] console.log(shinjinAndEliteFour)
|
1 2 3
| const shinjin = ["火","水","草"]
const new_shinjin = [...shinjin]
|
§ 新的数据类型:Symbol
一种新的数据类型,表示独一无二的值。
特点:
- 值是唯一的,避免命名冲突问题
- 不能和其他数据进行运算
- 不能使用for…in遍历,如果要遍历需要使用Reflect.ownKeys
- 扩展对象属性
唯一性:
1 2 3 4 5 6 7 8 9 10
| const a1 = Symbol('a') const a2 = Symbol('a')
console.log(a1 === a2)
const a1_key = Symbol.for('a') const a2_key = Symbol.for('a') console.log(a1_key === a2_key)
|
给对象添加属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| let game = { name = "XY", [Symbol('evolution')]:function(){ console.log("Mega Evolution") } [Symbol('artStyle')]:function(){ console.log("3D") }
}
console.log(game)
|
Symbol内置值(用于控制对象在特定情况下的表现)
1.Symbol.hansInstance
1 2 3 4 5 6 7 8 9 10 11 12
| class Person{ static [Symbol.hasInstance](){ console.log("我被用来检测类型") } }
let o = {}
console.log(o instanceOf Person)
|
2.Symbol.isConcatSpreadable
1 2 3 4 5
| const arr = [1,2,3] const arr2 = [4,5,6]
arr.[Symbol.isConcatSpreadable] = false console.log(arr.concat(arr2))
|
等等用法
§ 迭代器
for of和for in
for of遍历元素,for in遍历下标
for of不能在ie使用
工作原理
- 创建一个指针对象,指向当前数据结构的起始位置。
- 第一次调用next()方法,指针自动指向数据结构的第一个成员
- 接下来不断调用next()方法,指针一直向后移动,直到最后一个成员
- 每调用一次next()方法,返回一个包含value和donw属性的对象。
示例:
1 2 3 4 5 6 7 8 9 10
| const 3dMario = ['64','Sunshine','Galaxy','Galaxy2','Odessy']
let iterator = arr[Symbol.iterator]();
console.log(iterator.next()); console.log(iterator.next()); console.log(iterator.next()); console.log(iterator.next()); console.log(iterator.next()); console.log(iterator.next());
|
§ Promise
如果数据获取成功
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| const p = new Promise(function(resolve,reject){ setTimeout(function(){ let data = "从数据库中取得的数据" resolve(data) },1000)
setTimeout(function(){ let err = "数据获取失败" reject(data) },1000)
})
p.then( function(value){ console.log(value) }, function(reason){ console.log(reason) } )
|
§ 新的数据结构:Set
集合
ie不完全支持set
1 2 3
| let mainSeries = new Set (['Gen1','Gen2','Gen3','Gen4','Gen5','Gen6','Gen7','Gen1'])
console.log(mainSeries)
|
1
| console.log(mainSeries.size)
|
1 2
| mainSeries.add('Gen8') console.log(mainSeries)
|
1 2
| mainSeries.delete('Gen8') console.log(mainSeries)
|
1
| console.log(mainSeries.has('Gen5'))
|
1 2
| mainSeries.clear() console.log(mainSeries)
|
1 2
| mainSeries = [...mainSeries] console.log(mainSeries)
|
§ 新的数据结构:Map
类似对象,也是键值对的集合,但键可以不为String类型,也实现了iterator接口,可以遍历。
1 2 3 4 5 6 7 8 9 10
| let m = new Map()
m.set('name','Lucas') console.log(m)
m.set({'name','Lucas'},'Dawn') console.log(m)
|
1 2 3
| m.delete(name) console.log(m)
|
1
| console.log(m.get({'name','Lucas'}))
|
1 2
| m.clear() console.log(m)
|
§ Class