js基础之es6+

es6

const let 存在的意义

function会提升,var会提升
let不会挂载到window

因为存在暂时性死区,如果先使用再声明,会报错。
也有提升,在编译阶段可以访问作用域,但访问时有限制的。

箭头函数

一个是简洁,另一个是不绑定this

如果函数中,是简单 return,不包含 this 递归等
如果函数依赖bind

Set

发现用来计数去重很容易

1
2
var a=Array.from(query()*)).map(i=>i.tagName)
new Set(a).size

模块化

es6的模块化:

  • import..from 导入
  • export导出

如何使用,如何打包?
babel来转义,这里webpack都写过了。

rollup 比较高级,适合库的打包。

1
yarn add rollup rollup-plugin-node-resolve rollup-plugin-babel babel-plugin-external-helpers babel-preset-latest

Class

1
2
3
4
5
6
7
8
9
class MathHandle {
constructor(x,y){
this.x=x
this.y=y
}
add(){}
}
const m = new MathHandle(1,2)
console.log(m.add()

实现继承更简单了。class Dog extends Animal

和普通构造函数有何区别?

Set Map

新增的数组结构。
Set类似数组,但不允许重复。
Map类似对象,key可以是任意数据类型

1
2
3
4
5
6
7
8
//Set 去重
new Set([1,1,1,2,3])
// 方法属性
// size add() delete() has() clear()
// 遍历
set.keys() == set.values()
set.entries()
set.forEach()

Map

1
2
3
4
const map = new Map()
const obj = {p: 1}
map.set(obj, 'ok') // 设置
map.get(obj) // 获取ok

展开运算符

展开运算符作用:

  • 两个数组进行合并,干掉了 concat
  • 自动封装 arguments 剩余参数合并

循环

for...in key循环。 for...of 值循环。

正则表达式

可以通过 reg.flags 输出,按照 gimuy

Symbol

原始值不能通过instanceof判断类型,可以改造

1
2
3
4
5
6
class PrimitiveString{
static [Symbol.hasInstance](x){
return typeOf x === 'string'
}
}
'aaa' instanceof PrimitiveString

Promise

单独开一篇。

请我喝杯咖啡吧~