ES6学习总结

let和constant命令

不存在变量提升

变量一定要先声明再使用

暂时性死区

块级作用域里存在let命令,则它的变量就绑定这个区域不受外部的影响,即从一开始就形成封闭作用域。在声明之前都是不可用的.

不允许重复声明

const命令

对于复合类型的变量,变量名不指向数据,而指向数据所在的地址,const只保证变量名指向的地址不变,而不保证该地址的数据不变

变量的解构赋值

数组的解构赋值

如果结构不成功,则变量的值等于undefined.
不完全结构——等号左边的只匹配一部分的等号右边的数组

对象的解构赋值

对象的属性没有次序,变量必须与属性同名,真正被赋值的是属性后面的变量,而不是属性本身

字符串的解构赋值

任何类似数组的对象都有一个length的属性,因此可以对这个属性解构赋值

数值和布尔值的解构赋值

函数参数的解构赋值

用途

  1. 交换变量的值
  2. 从函数返回多个值
  3. 函数参数的定义
  4. 提取JSON数据
  5. 函数参数的默认值
  6. 遍历map解构
  7. 输入模块的指定方法

字符串的扩展

字符的Unicode表示法

‘\u0061’//a

codePointAt()

String.fromCodePoint()

at()

normalize()

includes(),startsWith(),endsWith()

repeat()

padStart(),padEnd()//ES7

模板字符串

模板字符串用反引号(`)标识,表示多行字符串时,所有空格和缩进都回被保留在输出之中。嵌入变量,需要将变量名放在${}之中

正则的扩展

u修饰符

用于正确处理大于\uFFFF的Unicode字符

y修饰符

与g修饰符类似,但是y修饰符要确保匹配从剩余的第一个位置开始

sticky属性

flags属性

后行断言

先行断言/\d+(?=%)/,/\d+(?!%)/
后行断言/(?<=$)\d+/,/(?

数值的扩展

二进制(0b)和八进制(0o)

Number.isFinite(),Number.isNaN()

Number.parseInt(),Number.parseFloat()

Number.isInterger()

Number.EPSILON

安全整数和Number.isSafeInteget()

JavaScript能准确表示的整数范围在-2^53~2^53之间(不含端点),超过将无法准确表示。
Number.MAX_SAFE_INTEGER===Math.pow(2,53)-1//true
Number.MIN_SAGE_INTEGER===Math.pow(-2,53)+1//true

Math对象的扩展

  1. Math.trunc()//返回整数部分
  2. Math.sign()//判断正负
  3. Math.cbrt()//立方根
  4. Math.clz32()//32位二进制表示整数的前导0的个数
  5. Math.imul()//两个数以32位带符号整数形式相乘
  6. Math.fround()//单精度浮点数形式
  7. Math.hypot()//参数的平方和的平方根
  8. Math.expm1()
  9. Math.log1p()
  10. Math.log10()
  11. Math.log2()
  12. 2**3//8

数组的扩展

Array.from()

将类似数组的对象和可遍历的对象转为真正的数组,例如:

let arrayLike = {
  '0':'a',
  '1':'b',
  '2':'c',
  length:3
}

Array.from()还可以接受第二个参数,用于将处理后的值放入返回的数组

Array.of()

主要用来弥补数组构造函数Array()的不足

数组实例的copyWithin()

Array.prototype.copyWithin(target,start=0,end=this.length)

数组实例的find()和findIndex()

数组实例的fill()

数组实例的entries(),keys(),values()

函数的扩展

函数的length属性

返回没有指定默认值的参数个数

rest参数

rest参数只能是最后一个参数
函数的length属性不包括rest参数

name属性

箭头函数

  1. 函数体内的this对象就是定义时所在的对象而不是使用时所在的对象
  2. 不可以作为构造函数,不可以使用new命令
  3. 不可以使用arguments对象,使用rest参数代替
  4. 不可以使用yield命令

尾调用优化

只要使用尾递归,就不会发生栈溢出,相对节省内存

函数参数的尾逗号

对象的扩展

Object.is()

Object.assign()

这是一个浅拷贝的方法

属性的遍历

  1. for…in:遍历自身和继承的可枚举属性
  2. Object.keys(obj):返回数组,包括自身(不含继承)所有可枚举属性
  3. Object.getOwnPropertyNames(obj):返回数组,包括自身所有属性
  4. Object.getOwnPropertySymbols(obj):返回数组,包含对象自身所有Symbol属性
  5. Reflect.ownKeys(obj):返回数组,包含自身所有属性(不管是否Symbol,也不管是否可枚举)

Object.values(),Object.entries()

对象的扩展运算符

Object.getOwnPropertyDescriptors()

Symbol

这是一种新的原始数据类型,前六种是undefined,null,Number,Boolean,String,Object

Symbol.for(),Symbol.keyFor()

Symbol.for(‘foo’) === Symbol.for(‘foo’);//true

Symbol.keyFor()返回一个已登记的Symbol类型的key

Proxy and Reflect

拦截操作描述
get(target,propKey,receiver)拦截属性读取
set(target,propKey,receiver)拦截属性设置
has(target,propKey)拦截propKey in proxy
deleteProperty(target,propKey)拦截delete proxy[propKey]
ownKeys(target)拦截getOwnPropertyNames等
getOwnPropertyDescriptors(target,propKey)拦截getOwnPropertyDescriptors
defineProperty(target,propKey,propDesc)拦截defineProperty等
preventExtension(target)拦截preventExtension(proxy)
getPrototypeOf(proxy)拦截getPrototypeOf
isExtensible(target)拦截isExtensible(proxy)
setPrototypeOf(proxy)拦截 setPrototypeOf(proxy,proto)
apply(target,Object,args)拦截proxy实例作为函数的调用如proxy(…args),proxy.call(object,…args),proxy.apply()
construct(target,args)拦截proxy实例作为构造函数的调用如new proxy(…args)

Reflect概述

  1. 将Object对象一些明显属于语言内部的方法放到Reflect对象上
  2. 修改某些Object方法的返回结果,如Reflect.defineProperty(obj,name,desc)在无法定义属性时返回FALSE
  3. 让Object操作都变成函数行为
  4. Reflect对象的方法与Proxy对象的方法一一对应,只要是Proxy对象的方法,都能在Reflect上面找到对应的方法

二进制数组

Set和Map数据结构

Set

数据结构Set类似数组,但是成员的值都是唯一的,没有重复的值,向set中加入值时,不会发生类型转换

Set实例的属性和方法

属性
- Set.prototype.constructor:构造函数
- Set.prototype.size:返回Set实例的成员总数

方法
- add(val):添加某个值,返回Set本身
- delete(val)删除某个值,返回布尔值
- has(val):返回布尔值,表示是否为Set成员
- clear():清除所有成员,没有返回值

遍历操作
  • keys()
  • values()
  • entries()
  • forEach()

WeakSet

  1. WeakSet的成员只能是对象,不能是其他类型的值
  2. WeakSet中的对象都是弱引用,垃圾回收机制不考虑WeakSet对该对象的引用

Map

Map数据结构类似对象,也是键值对的集合,但是“键”的范围不限于字符串
注意 只有对同一对象的引用,Map结构才将其视为同一个键,否则即使键名相同,内存地址也是不同的,Map将其视为不同的两个键

Map实例的属性和方法
  • size属性
  • set(key,val)
  • get(key)
  • has(key)
  • delete(key)
  • clear()
遍历操作
  • keys()
  • values()
  • entries()
  • forEach()

WeakMap

只接受对象作为键名,不接受其他类型的值作为键名,而且键名所指向的对象不计入垃圾回收机制

Iterator and for…of

Generator函数

Generator函数是一种异步编程解决方案,封装了多个内部状态
yield只能在生成函数里面出现,否则会报错

注意 yield语句本身没有返回值,或者说总是返回undefined,next方法可以带一个参数,这个参数作为上一个yield的返回值,示例程序:

function* foo(x) {
  var y = 2 * (yield (x + 1));//y = 24
  var z = yield (y / 3);//z = 13
  return (x + y + z);//返回42
}
var a = foo(5);
console.log(a.next());
console.log(a.next(12));
console.log(a.next(13));

Promise对象

Promise构造函数接收一个函数作为一个参数,该函数的两个参数分别是resolve和reject,promise实例生成后可以用then方法分别指定Resolved和Reject状态

Promise.resolve()将现有对象转为Promise对象

异步操作和Async函数

Generator函数
Thunk函数
co模块

自动执行Generator

async函数

Generator函数的语法糖,内置执行器,同时有更好的语义和适应性。
正常情况下await后面应该是Promise对象,如果不是会转成promise对象并立即resolve

Class

Class 可以看做只是一个语法糖,一个类必须有constructor方法,如果没有显示定义,一个空的constuctor会被默认添加。Class不存在变量提升

Class的静态方法

加上static,实例无法继承静态方法,只有子类可以调用。ES6规定Class内部只有静态方法,没有静态属性,只有实例属性,ES7提案只需在属性前面加上static就可以了

Module

通过import来引入模块功能,export用于规定模块的对外接口

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值