ES6
2019-03-23 17:30:30 0 举报
AI智能生成
ES6基本框架
作者其他创作
大纲/内容
版本规定
let, const
块级作用域和常量
没有变量提升,存在暂时性死区
解构赋值
数组、对象的解构赋值
其他类型解构赋值时会先自动转为对象
内置对象的扩展
String
unicode表示法
codePointAt()
fromCodePoint()
Iterator API
normalize()
includes(), startsWith(), endsWith()
repeat()
padStart(), padEnd()
matchAll()
模板字符串,模板编译
标签模板
String.raw()
RegExp
字符串的 match, replace, search, split 实现上调用 RegExp 的方法
新的修饰符:u(unicode模式), y(sticky模式), s(dotAll模式)
后行断言:/(?<=\$)foo/, /(?<!=\$)foo/
具名组匹配
解构赋值和替换
matchAll()
Number
二进制(0b, 0B),八进制(0o, 0O)表示法
Number.isFinite(), Number.isNaN(), Number.isInteger(), Number.isSafeInteger()
全局方法 parseInt(), parseFloat() 转移到 Number 对象下
Number.EPSILON 最小浮点数之差
Math 对象的扩展
Math.trunc(), Math.sign(), Math.cbrt(), Math.clz32(), Math.imul(), Math.fround(), Math.hypot()
对数方法:Math.expm1(), Math.log1p(), Math.log10(), Math.log2()
双曲函数方法:Math.sinh(), Math.cosh(), Math.tanh(), Math.asinh(), Math.acosh(), Math.atanh()
指数云算符:**
Function
默认参数,rest 参数
length, name 属性
严格模式,如果使用了默认参数、解构、扩展操作符、函数内部不能显式设为严格模式
箭头函数
双冒号云算符:::
尾调用优化,尾递归
尾逗号
Array
扩展云算符:...
Array.from(), Array.of()
Array.prototype 的扩展
copyWithin(target, start=0, end=this.length)
find(fn), findIndex(fn)
fill()
entries(), keys(), values()
includes(v, start=0)
flat(level=1), flatMap(fn)
数组空位[,,,]的处理很多函数不一致,所以尽量避免空位的出现
Object
属性的简洁表示法
属性名表达式:{ ['a' + 'bc']: 123 }
Object.is()
Object.assign(target, ...sources)
Object.getOwnPropertyDescriptor(obj, descriptorName)
Object.getOwnPropertyDescriptors(obj)
__proto__, Object.getPrototypeOf(), Object.setPrototypeOf()
super 关键字
entries(), keys(), values()
Symbol
Symbol(key), Symbol.for(key), Symbol.keyFor(symbol)
内置的 Symbol
hasInstance(): 使用 instanceof 时会根据这个函数判断
isConcatSpreadable(): 连接数组的时候会根据这个函数判断是否将待连接的数组展开
species(): 创建衍生对象时判断其 instanceof 会调用该函数
match(): str.match(regexp) 时会调用
replace()
search()
split()
iterator: 指向对象的默认遍历器方法
toPrimitive(hint): 隐式转换时会自动调用
toStringTag(): typeof obj 返回的 [object Object], [object Array]... 就是根据这个函数返回的
unscopables: 使用 with 关键词时,指定哪些属性会被排除
Set 和 Map 数据结构
Set
add(v), delete(v), has(v), clear(), size
遍历:keys(), values(), entries(), forEach()
WeakSet
成员只能是对象
不参与引用计数
没有 clear() 和 遍历器
Map
和 Object 对比:Object是 key: value,而Map 是 value: value
has(key), get(key), set(key, value), delete(key), clear(), size
遍历:keys(), values(), entries(), forEach()
WeakMap
只接受对象作为键名
键值不计入 GC
get(k), set(k), has(k), clear()
用途:dom 节点作为键名,在其上添加其他属性。在dom 被删除后该键值会自动删除,不用手动释放,不存在内存泄漏
异步流程控制
Promise
Generator
生成器函数,每当 yield 时暂停,通过 iterator.next(v) 可以恢复暂停,并传入重新开始的值
function* (){}, yield, yield*
async, await
实质上是 Generator 的语法糖,更具备语义性,更易用
Iterator
定义一种统一的接口,来方便遍历对象。Iterator接口主要供 for ... of 消费
Iterator 接口部署在对象的 [Symbol.iterator] 属性上,实质上是一个遍历器生成函数
Proxy
get, set, has, deleteProperty, ownKeys, getOwnPropertyDescriptor, defineProperty, preventExtensions, getPrototypeOf, isExtensible, setPrototypeOf, apply, construct
Reflect
每个 Proxy 对象的拦截操作,都有一个对应的 Reflect 方法,保证原生/默认行为能够正常执行
原始 Object 对象上的一些属性,放在了 Reflect 对象上;而且将命令式语句变成了函数式语句
Reflect.get(target, name, receiver)
Reflect.set(target, name, value, receiver)
Reflect.has(obj, name)
Reflect.deleteProperty(obj, name)
Reflect.construct(target, args)
Reflect.getPrototypeOf(obj)
Reflect.setPrototypeOf(obj, newProto)
Reflect.apply(func, thisArg, args)
Reflect.defineProperty(target, propertyKey, attributes)
Reflect.getOwnPropertyDescriptor(target, propertyKey)
Reflect.isExtensible (target)
Reflect.preventExtensions(target)
Reflect.ownKeys (target)
Class
没有提供私有方法,一般做法是私有方法以 _ 命名开头,或者使用 Symbol
getter, setter
static fn
extends
静态属性和实例属性
new.target
super
Module
export, export default, export {n as m}
import DefaultObj, import * as Obj, import {a, b, c}, import {a as b}
export {a, b} from 'moduleName'
动态加载目前还处于提案阶段,import 返回的是一个 Promise
Decorator
目前还处在提案阶段
ArrayBuffer
工具
Traceur 转码器
Babel
0 条评论
下一页