ES6学习
ECMAScript6.0 (ES6)
ECMA(European computer manufactures association,欧洲计算机制造联合会)
var
- 全局作用
- 变量提升
let
- 变量不能重复声明
- 块级作用域
- 不存在变量提升
- 不影响作用域链
const
- 声明常量(不能重复)
- 必须初始化
- 不能修改
- 块级作用域
- 常量数组可修改
解构赋值
可以是数组,对象
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 const arr = [1, 2, 3]
let [a, b, c] = arr
console.log(a, b);
const p = {
name: '张三',
age: 10,
run: function () {
console.log('run run run');
}
}
let { name, age, run } = p
console.log(name)
run();
模板字符串
- ``,反引号
- 可换行
- 变量拼接
对象的简化写法
1 | let name = '张三' |
箭头函数
- this的静态属性,永远指向windows
- 不能作为构造函数实例化对象
- 不能使用arguments参数列表
- 简写
1
2
3
4
5
6
7// 简写
function pow(n){
return n*n
}
//
let pow = n => n * n
console.log(pow(9)); - 适合于this无关的调用,如定时器,数组的方法回调
- 不适合与this有关的调用,事件回调,对象方法
rest参数
必须要方法参数最后1
2
3
4
5
6
7
8
9
10 function fn1() {
console.log(arguments);
}
fn1(12, 3, 3, 4, 5)
function fn2(...args) {
console.log(args);
}
fn2(1, 2, 3, 4)
扩展运算符[…]
- 数组合并
- 数组克隆
- 将伪数组变为真正的数组
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23let arr = [1, 2, 3, 4]
function fn() {
console.log(arguments);
}
fn(arr)
fn(...arr)
// 数组合并
let arr1 = ['abc', 'def', 'ghi']
let arr2 = ['jkl', 'mno']
let res1 = arr1.concat(arr2)
let res2 = [...arr1, ...arr2]
console.log(res1);
console.log(res2);
// 数组克隆
const color = ['R', 'G', 'B', 'A']
const c = [...color]
console.log(c);
// 将伪数组变为真正的数组
let divs = document.querySelectorAll('div')
console.log(divs);
let divArr = [...divs]
console.log(divArr);
Symbol
- 表示独一无二的值,它是JavaScript中的第七种数据类型(其余数据类型:USONB—->you are so NB,对,就是你狠牛逼😄,相信聪明的你一定想出来了
u:undefined,s:string,o:object,n:null、number,b:boolean
),是一种类似于字符串的数据类型 - 值唯一,解决命名冲突
- 不能与其他数据进行运算
- 定义的对象属性不能用for…in遍历,但是可以使用Reflect.ownKeys来获取对象的所有属性
MDN
迭代器
for...of
- 创建一个指针对象,指向当前数据结构的起始位置
- 第一次调用next方法指针自动指向数据结构的第一个成员
- 接下来不断调用next方法,指针一直后移,直到指向最后一个成员
- 每调用next方法返回一个包含value和done属性对象
1 | let arr = [1, 2, 3, 4] |
- 对象不可遍历,给对象加迭代器
1 | let obj = { |
生成器
一个特殊的函数
1 | // 一个特殊的函数 |
Promise
set
let s=new Set()
- 元素个数:
size
- 添加:
add()
- 删除:
delete()
- 检测:
xxx.has('xxx')
- 清空:
xxx.clear()
- 遍历:
for(let v of xxx)
- 数组去重,交集,并集,差集
map
let m=new Map()
- m.set(key,value) key可以是对象,value可以是数组或者函数
- m.get(key)
- m.size
- m.delete(key)
- m.clear()
- for(let v of m){}
class
http://javascript.ruanyifeng.com/oop/prototype.html#toc4
- 静态成员或静态方法用static修饰
- 继承通过super()关键字
- gettter()和setter()
数值
- 精度问题(0.1+0.2)
- 进制(0b,0o,0d,0x)
- isNaN()
- parseInt()
- parseFloat()
- Number.isInteger()
- Math.trunc() 抹掉小数
- Math.sign() 放回 1 0 -1 分别表示1 0 -1
对象方法
- Object.is(val1,val2) 判断两个值是否完全相等
- Object.assign() 对象的合并
- Object.setPrototypeOf() 设置原型对象
模块化
- 防止命名冲突
- 代码复用
- 高维护性
export
对外接口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
// 分别暴露(m1.js)
export const name='张三'
export function test(){
console.log('test模块化');
}
// 同一暴露(m2.js)
const name = '张三'
function test() {
console.log('test模块化');
}
export {
name,
test
}
// 默认暴露(m3.js)
export default {
school: '清华',
change: function () {
console.log('chage');
}
}
import
1 | // 通用导入(导入全部) |
ES7新特性
- 判断数组中有没有子项
indexOf
:返回索引,存在返回第一次出现的索引,不存在返回-1includes
:true or false
async
- 返回结果为pormise对象
- 返回结果为promise
1
2
3
4
5
6
7
8
9
10
11async function test(){
/* return 111;
return 'xxx';
throw new Error('xxx') */
return new Promise((resolve,reject){
resolve('成功')
// reject('失败')
})
}
await
- 必须和async一起使用
- await右侧表达式一般为pormise对象
- await返回成功后的值
- 失败就会抛出异常,需用try…catch捕获
async和await结合读取文件
1 | const fs = require('fs') |