Es6

本系列文章是本人学习相关知识时所积累的笔记,以记录自己的学习历程,也为了方便回顾知识;故文章内容较为随意简练,抱着学习目的来的同学务必转移他处,以免我误人子弟~

参考资料:
阮一峰:ECMAScript 6 入门

let和const

  • let和const都只在块级作用域内有效
  • 不支持变量提升->暂时性死区(temporal dead zone)
  • 不允许重复声明
  • let和const实现了块级作用域
  • 函数可在块级作用域中声明
  • 函数声明和函数表达式的区别
  • const本质是要求变量指向的内存地址不可变
  • Object.prototype.freeze()冻结对象(的属性)
  • 顶层对象:浏览器的window对象、node的global对象
  • es6 全局对象和顶层对象脱钩:let、const、class声明的全局变量不再是顶层对象的属性

解构赋值

  • 具有Iterator的数据结构可以采用数组形式的解构赋值
  • 可以指定默认值,只有数组成员(可枚举对象成员)严格等于(===)undefined,默认值才有效;
  • 数组需要按顺序,而对象不用(但变量名必须属性名相同)
  • 变量名与属性名不一致时,使用pattern : variable前者匹配对象的属性名,后者为新变量名
  • 字符串也能解构赋值,此时字符串是类数组对象;
  • 数值和布尔值进行解构赋值时,会将数值和布尔值转化为对象,所以是对象的结构赋值;
  • 函数参数可解构赋值
  • 两种函数参数默认值的写法

用途:
…遍历Map结构等

字符串

  • 使用\uxxxx表示字符,xxxx表示字符的Unicode码点

  • es6使用 {} 接收16进制数可成功编译

  • \uD842\uDFB7->'?'\u20BB7->' 7';es6使用{}解决这个问题:\u{20BB7}->'?'(其中D842+DFB7=20BB7);

  • 以 utf-16 格式储存字符,每个字符两个字节;偶尔有4个字节的单个字符,js当成两个字符

  • codePointAt方法会正确返回 32 位的 UTF-16 字符的码点(即码点超过 FFFF 的字符)

  • es6为字符串增加 Iterator 接口,可以识别大于0xFFFF的码点;

  • 模板字符串:支持嵌入变量和多行字符串

  • 模板的 {} 之间能进行运算和调用函数

  • raw() 方法,处理模板字符串的变量和对反斜杠转义

  • 标签模板是函数调用的特殊形式;

  • 标签模板的一个用途是i18n(国际化处理)

  • String.raw()的价值何在??

  • String.fromCharCode()不能识别码点大于0xFFFF的字符->es6提供String.fromCodePoint(),可以识别大于0xFFFF的字符

  • normalize(): Unicode 正规化;

  • includes(), startsWith(), endsWith(), repeat(), padStart(), padEnd()

正则表达式

  • RegExp构造函数 修饰符被允许且可覆盖源正则表达式
  • u 修饰符,处理4个字节的utf-16字符编码
  • 点(.)字符不能识别码点大于0xFFFF的字符,需要使用u修饰符(点(.)字符可识别换行外的所有字符)
  • RegExp.prototype.unicode 属性,表示是否有 u 修饰符
  • y 修饰符,与 g 修饰符相同,都是全局,但 y 必须连续(粘连 sticky)
  • y修饰符的设计本意,就是让头部匹配的标志^在全局匹配中都有效
  • RegExp.prototype.sticky 属性,判断是否有 y 修饰符
  • RegExp.prototype.flags 属性,返回修饰符
  • 4种行终止符
  • dotAll模式:s 修饰符,使点(.)字符能匹配任意字符
  • RegExp.prototype.dotAll 属性,表示是否有 s 修饰符
  • 后行断言和后行否定断言 : /(?<=\%)\d+//(?<!\%)\d+/分别表示只匹配百分号之后的数字和只匹配不在百分号后的数字
  • Unicode 属性类
  • 组匹配(es5)和具名组匹配(es6),模式为:问号+尖括号+组名(?<name>),可在exec()方法返回的匹配结果的groups属性上引用组名

数值

  • 二进制表示法:0b或0B;八进制表示法:0o或0O
  • Number.isFinite:不是数值一律返回 false;
  • Number.isNaN 方法:不是 NaN 一律返回 false;
  • Number.parseInt() 和 Number.parseFloat() 方法,与全局的parseInt和parseFloat一样
  • 常量 Number.EPSILON是JavaScript能够表示的最小精度
  • Number.MAX_SAFE_INTEGER,Number.MIN_SAFE_INTEGER,Number.isSafeInteger()
  • ES6 在 Math 对象上新增了 17 个与数学相关的方法
  • 指数运算符:** ,右结合

函数

  • 函数参数默认值
  • 函数的length属性 表示没有指定默认值的参数个数
  • 作用域(context)
  • rest参数,可以向函数传递任意数目的参数
  • name属性,返回函数名
  • 箭头函数:直接调用无返回值的函数:let fn = () => void doesNotReturn();无需{}代码块
  • 实际原因箭头函数根本没有自己的this,导致内部的this就是外层代码块的this
  • 箭头函数函数体内的this对象,是定义时所在的对象,而不是使用时所在的对象
  • 箭头函数可以在定义时绑定this,从而this变成静态
  • 尾调用和尾调用优化、尾递归优化

数组

  • 扩展运算符:可以将字符串转为数组;识别4个字节的Unicode字符
  • 只有定义了Iterator接口的对象才可以使用扩展运算符
  • Array.from() 将类似数组的对象(array-like object)和可遍历(iterable)的对象转为真正的数组
  • 类似数组的对象,本质特征只有一点,即必须有length属性
  • Array.from() 也可以将字符串转为数组,且能正确处理4字节Unicode字符
  • Array.of() 将一组值转化为数组
  • copywithin 方法 与splice类似
  • 数组实例的 entries(),keys() 和 values() :keys()是对键名的遍历、values()是对键值的遍历,entries()是对键值对的遍历。
  • include方法的好处是语义直白且能正确处理NaN
  • flat()支持多维展开;flatMap()可遍历数组元素,只支持一维展开
  • ES6 则是明确将空位转为undefined。

对象

  • 属性简洁的表示法:变量名作为属性名,属性值为变量指向的值(或指针)
  • 尽量使用 Object.keys() 遍历属性
  • for...in,Object.key(obj),Object.getOwnPropertyNames(obj),Object.getOwnPropertySymbols(obj),Reflect.ownKeys(obj)
  • super 关键字,指向当前对象的原型对象,只能用在对象的方法中
  • Object.is()与 === 的行为基本一致,主要解决 === 的+0和-0,NaN的问题
  • Object.assign()的目标对象不能为undefined或null
  • Object.assign()总是拷贝一个属性的值,而不会拷贝它的取值和赋值方法

Symbol

  • Symbol是原始数据类型,可作为对象的属性名
  • Symbol值可转字符串和布尔值,不能转数值
  • Symbol属性名不可被for...infor...ofObject.keys()Object.getOwnPropertyNames()JSON.stringify(),只有Object.getOwnPropertySymbols()可以获得Symbol属性名
  • Reflect.ownKeys可以返回常规键名和Symbol键名
  • Symbol.for(attr)生成在全局注册的Symbol值,attr相同时,Symbol值也相同

Set、WeakSet

  • 新的数据结构,类似数组,成员唯一;add()方法添加成员
  • 去除数组重复成员:[…new Set(array)] 或 Array.from(new Set(array))
  • 属性:size 返回成员总数;操作方法:add 添加成员、delete 删除成员、has 判断成员是否存在、clear 清楚所有成员
  • 遍历方法:keys() values() entries() forEach() for...of
  • 交集、并集、差集
  • 无法直接改变Set的结构
  • WeakSet与Set类似,只接受对象成员,且对象成员都是弱引用(弱引用:即垃圾回收机制不考虑WeakSet的成员对象的引用,垃圾回收机制会自动回收对象占用的内存,不过该对象在不在WeakSet中)
  • 即WeakSet里面的对象引用随时失效,故规定WeakSet不可遍历
  • WeakSet有add、delete、has方法
  • WeakSet 的一个用处,是储存 DOM 节点,而不用担心这些节点从文档移除时,会引发内存泄漏

Map WeakMap

  • Map的键不限于字符串
  • size属性
  • 操作方法:set、get、has、delete、clear
  • 遍历方法:keys、values、entries、forEach
  • WeakMap键名只限于对象(null除外),弱引用
  • WeakMap只有get、set、has、delete
  • WeakMap 应用的典型场合就是 DOM 节点作为键
  • WeakMap 的另一个用处是部署私有属性

Proxy

  • proxy可以改变目标对象的某些行为,支持13种行为的拦截

Reflect

Promise

  • 三种状态:pending(进行中)、fulfilled(已成功)、rejected(已失败)
  • 只有异步操作才能改变状态;状态改变后不再改变
  • 实例化Promise对象,接受一个函数作为参数,该函数的两个参数是resolve和reject
  • resolve函数的作用是将Promise状态从pending变为fulfilled,并将异步操作的结果作为参数传递出去:resolve(value)
  • reject函数的作用是将Promise状态从pending变为rejected,并将异步操作报出的错误作为参数传递出去:reject(error)
  • then方法指定resolved状态(fulfilled)状态的回调函数和rejected状态的回调函数: promise.then(function(value) { // success }, function(error) { // failure });;两个函数都是接收Promise对象传出的值作为参数;
  • (当前脚本中,异步操作要在所有同步操作完成后才执行)
  • Promise.prototype.then()返回新的Promise实例
  • 关于resolve接收一个Promise对象的异步操作流程;只有在该promise对象的状态变为resolved时才调用指定的resolve的回调函数

Iterator

  • 遍历器(Iterator)就是这样一种机制。它是一种接口,为各种不同的数据结构提供统一的访问机制
  • 任何数据只需要部署Iterator接口就可以实现遍历操作
  • 默认的 Iterator 接口部署在数据结构的Symbol.iterator属性
  • 凡是部署了Symbol.iterator属性的数据结构,就称为部署了遍历器接口

Generator

  • yield具有记忆功能,可以记住遍历对象的当前状态
  • generator函数与一般函数不同,不可以当成一般函数使用(在需要一般函数为参数的方法中不能使用generator函数,有句法错误)
  • Generator 函数执行后,返回一个遍历器对象。该对象本身也具有Symbol.iterator属性,执行后返回自身。
  • throw()抛出的错误现在函数内部被捕获(如果有try-catch语句),如果继续调用throw()方法会在外面抛出错误
  • throw()只能从内部或者外部捕获一次,
  • return()方法提前结束遍历,参数值为返回对象的value值
  • 如果在 Generator 函数内部,调用另一个 Generator 函数,默认情况下是没有效果的。
  • 使用yield* ,在generator函数内插入generator函数,实质上相当于在遍历列表中插入其他遍历列表
  • 子例程:栈堆的先进后出执行方式,只有子函数结束,父函数才能结束;
  • 协程:多线程运行,可以随时切换线程的执行权,

Class 继承

  • extends 实现继承
  • 继承类(子类)必须在 constructor 方法中调用 super 方法
  • 子类继承父类的静态方法
  • super 作为父类的构造函数,返回子类的实例
  • super 作为对象
  1. 在普通方法中,是父类的原型对象;通过super调用父类的方法时,方法内部的this指向当前的子类实例。
  2. 在静态方法中,super 指向父类

ArrayBuffer

  • WebGL,就是指浏览器与显卡之间的通信接口,为了满足 JavaScript 与显卡之间大量的、实时的数据交换,它们之间的数据通信必须是二进制的
  • ArrayBuffer对象:代表内存之中的一段二进制数据;
  • TypedArray视图:共包括 9 种类型的视图
  • DataView视图:可以自定义复合格式的视图
  • ArrayBuffer对象代表储存二进制数据的一段内存,它不能直接读写,只能通过视图(TypedArray视图和DataView视图)来读写,视图的作用是以指定格式解读二进制数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值