ES6
lhl891111
这个作者很懒,什么都没留下…
展开
-
ES6基础
箭头函数在使用时应当注意什么:箭头函数使用简洁,可以避免使用早起的.bind函数绑定this或需要固定上下文的地方并且让代码更加简洁。①箭头函数没有自己的this,它的this是派生而来的,根据“词法作用域”派生而来。也就是说在声明时就绑定了作用域。因此在需要根据上下文来动态绑定this的情况下就不要使用:例如:在对象上定义的函数,定义原型方法,定义事件回调函数,定义构造函数。②箭头函...原创 2019-11-20 17:11:13 · 184 阅读 · 0 评论 -
ES6篇(8)--数组扩展
(1)扩展运算符定义:扩展运算符是三个点(...),它好比rest参数的逆运算,将一个数组转为用逗号分隔的参数序列。例子:console.log(...[1,2,3])//1,2,31.该运算符主要用于函数调用,扩展运算符与正常的函数参数可以结合起来使用。例如:function f(v, w, x, y, z) { }const args = [0, 1];f(-1, ...ar...转载 2019-06-18 17:50:27 · 160 阅读 · 0 评论 -
ES6篇(12)--Set和Map数据结构
(1)SetES6提供了新的数据结构Set,它类似于数组,但是成员的值是唯一的。Set本身是一个构造函数,用来生成Set数据结构,Set函数可以接受一个数组(或者具有iterable接口的其他数据结构)作为参数,用来初始化。例子:const s = new Set();[2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x));for (l...转载 2019-06-24 16:47:50 · 151 阅读 · 0 评论 -
ES6篇(16)--Generator函数
阮一峰 ES6 Generator函数Generator函数是ES6提供的异步编程解决方法,语法行为与传统函数不同。(1)Generator函数的基本概念①Generator函数是一个状态机,封装了很多内部状态②Generator函数是一个遍历器对象的生成函数,返回遍历器对象,可依次遍历Generator函数内部的每一个状态③从形式上看Generator函数是一个普通函数,有两个特征:...转载 2019-08-02 16:44:03 · 183 阅读 · 0 评论 -
ES6篇(17)--Generator函数的异步应用
阮一峰 ES6 Generator函数的异步应用传统的异步编程方法大概有四种,回调函数,事件监听,发布/订阅,Promise对象,Generator函数将JavaScript异步编程带入了一个全新的阶段。(1)基本概念①异步所谓"异步",简单说就是一个任务不是连续完成的,可以理解成该任务被人为分成两段,先执行第一段,然后转而执行其他任务,等做好了准备,再回过头执行第二段。②同步连续的...转载 2019-08-05 13:37:41 · 117 阅读 · 0 评论 -
ES6篇(18)--async函数
阮一峰 ES6 async函数(1)含义async函数是Generator函数的语法糖。使得异步操作变得更加方便。async函数就是将Generator函数的星号替换成async,将yield替换成await。async函数对Generator函数的改进,体现为以下四点:①内置执行器anync函数的执行,与普通函数一样调用,就会自动执行,然后输出结果,不像Generator函数,需要调用...转载 2019-08-05 15:04:35 · 185 阅读 · 0 评论 -
ES6篇(22)--Module的加载实现
(1)浏览器加载①传统方法:HTML网页中,浏览器通过<script>标签加载了JavaScript脚本。默认情况下,浏览器是同步加载JavaScript脚本,即渲染引起遇到<script>标签就会停下来,等到执行完脚本,再继续向下渲染,如果是外部脚本,还必须加入脚本的下载时间。如果脚本体积很大,下载和执行的时间就会很长,会造成浏览器堵塞,用户会感觉浏览器卡死,所以...转载 2019-08-13 12:21:27 · 188 阅读 · 0 评论 -
ES6篇(23)--编程风格
(1)块级作用域①let取代varvar命令在顶层声明会导致声明了全局变量,还存在变量提升,而let没有副作用②全局常量和线程安全在let和const之间,建议优先使用const,尤其是在全局环境,不应该设置变量,只应设置常量。const优于let的几个原因:一个是const可以提醒阅读程序的人,这个变量不应该改变;另一个是const比较符合函数式编程思想,运算不改变值,只是新建值,...转载 2019-08-13 13:15:02 · 149 阅读 · 0 评论 -
ES6篇(15)--Iterator和for ...of
阮一峰 ES6遍历器(1)Iterator(遍历器)的概念遍历器是一种接口,为各种不同的数据结构提供统一的访问机制【即for..of循环】,任何数据结构只要部署Iterator接口,就可以完成遍历操作(依次处理该数据结构的所有成员)。作用:①为各种数据结构,提供一个统一的简便的访问接口②使得数据结构的成员能够按某种次序排列③ES6创造了一种新的遍历命令for...of循环,Ite...转载 2019-08-02 11:33:17 · 113 阅读 · 0 评论 -
ES6篇(20)--Class的继承
阮一峰ES6 Class继承(1)简介①Class通过extends实现继承。②子类必须在constructor方法中调用super方法,否则新建实例时会报错;因为子类自己的this对象,必须先通过父类的构造函数完成塑造,得到与父类同样的实例属性和方法,然后对其进行加工,加上子类自己的实例属性和方法,如果不调用super方法,子类就得不到this对象。【注意:在子类的构造函数中,只有先调...转载 2019-08-08 16:43:55 · 427 阅读 · 0 评论 -
ES6篇(19)--Class的基本语法
阮一峰 ES6 Class的基本语法(1)简介ES6中的class可以看作是一个语法糖,它的绝大部分功能ES5都可以做到,新的class写法只是让对象原型的写法更加清晰,更加像面向对象编程的方法而已。class中有一个constructor方法,是构造方法,constructor中的this代表实例对象。class中的方法不需要加上function关键字,直接把函数定义放进去就可以了。另外...转载 2019-08-07 17:20:36 · 232 阅读 · 0 评论 -
ES6篇(21)--Module的语法
阮一峰 ES6 Module(1)概述ES6模块的设计思想是尽量的静态化,使得编译时就能确定模块的依赖关系,以及输入和输出的变量。ES6模块不是对象,而是通过export命令显示指定输出的代码,再通过import命令输入。// ES6模块import { stat, exists, readFile } from 'fs';上面代码的实质是从fs模块加载 3 个方法,其他方法不加载。这种...转载 2019-08-12 18:08:20 · 175 阅读 · 0 评论 -
ES6篇(14)--Reflect
(1)概述Reflect对象是ES6为了操作对象而提供的新API,Reflect对象的设计目的有几个:1.将Object对象的一些明显属于语言内的方法(比如Object.defineProperty),放到Reflect对象上。也就是说从Reflect对象上可以拿到语言内部的方法。2.修改某些Object方法的返回结果,使其变得更合理。3.让Object操作都变成函数行为,某些Objec...转载 2019-06-26 13:57:32 · 176 阅读 · 0 评论 -
ES6篇(13)--Proxy
(1)Proxy的概述Proxy用于修改某些操作的默认行为,可以理解成,在目标对象之前架设一层"拦截",外界对该对象的访问,必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写。Proxy在这里可以译为代理器。ES6提供Proxy构造函数,用来生成Proxy实例。用法:var proxy = new Proxy(target, handler);说明:Proxy对象的所...转载 2019-06-25 17:59:19 · 392 阅读 · 0 评论 -
ES篇(6)--数值的扩展
(1)二进制和八进制的表示法ES6提供了二进制和八进制的新写法,分别用前缀0b(或0B)和0o(或0O)表示。如果要将0B和0O前缀的字符串转为十进制,要用Numberfangfa例如:Number('0b111') // 7Number('0o10') // 8(2)Number.isFinite()和Number.isNaN()ES6在Number对象上提供了Number....转载 2019-06-12 12:00:12 · 473 阅读 · 0 评论 -
Promise原理与实现
var Promise = (function() { function Promise(resolver) { if (typeof resolver !== 'function') { //resolver必须是函数 throw new TypeError('Promise resolver ' + resolver + ' is not a ...转载 2019-04-23 09:39:24 · 236 阅读 · 0 评论 -
ES6篇(5)正则的扩展
(1)RegExp 构造函数在ES5中,RegExp 构造函数的参数有两种1.var regex = new RegExp('xyz', 'i');2.var regex = new RegExp(/xyz/i);这两行代码都等价于,字面量方式var regex = /xyz/i;但是ES5不允许下面这样写var regex = new RegExp(/xyz/, 'i');会报错...转载 2019-06-13 14:26:38 · 191 阅读 · 0 评论 -
ES6篇(9)--对象的扩展
(1)属性的简洁表示法ES6允许直接写入变量和函数作为对象的属性和方法。在对象之中直接写变量,这时,属性名为变量名,属性值为变量的值例子:const foo = 'bar';const baz = {foo};baz // {foo: "bar"}// 等同于const baz = {foo: foo};例子:const o = { method() { retu...转载 2019-06-19 17:53:15 · 163 阅读 · 0 评论 -
ES6篇(1)-1let和const命令
(1)let命令 let命令用来声明变量,用法类似于var,但是所声明的变量只在let命令所在的代码块中有效。在代码块之外调用变量,会报错。 let命令不存在变量提升,即let命令声明的变量一定要声明后使用否则报错。 暂时性死区,ES6规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域,凡是在声明之前就是用这些变量,会报...转载 2019-06-10 10:17:39 · 133 阅读 · 0 评论 -
ES6篇(2)-变量的解构赋值
ES6中允许按照一定的模式,从数组和对象中提取值,对变量进行赋值,这被称为解构赋值。(1)数组的解构赋值let [a, b, c] = [1, 2, 3];本质上,这种写法属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值而如果解构不成功,变量的值就会等于undefined;对于不完全解构,也就是只匹配部分,这种情况,解构依然可以成功。而如果等号右边不是数组(严格的说...转载 2019-06-10 11:54:01 · 244 阅读 · 0 评论 -
ES6篇(10)--对象的新增方法
(1)Object.is()ES5比较两个值是否相等,只有两个运算符:相等运算符(==),缺点:自动转换数据类型严格相等运算符(===),缺点NaN不等于自身,+0等于-0ES6提出同值相等算法,用来解决这个问题--Object.is用来比较两个值是否严格相等,它与===的行为一致,且+0不等于-0,NaN等于自身(2)Object.assign()该方法用于对象的合并,将源对象...转载 2019-06-20 18:24:17 · 534 阅读 · 0 评论 -
ES6篇(4)字符串的新增方法
(1)String.fromCodePointES5中String.fromCharCode()将Unicode编码转为字符,但这个方法不能识别码点大于0xFFFF的字符。ES6提供了String.formCodePoint()方法可以识别码点大于0xFFFF的字符。它的作用与下面的codePointAt()方法相反,需要注意的是fromCodePoint方法定义在String对象上,而c...转载 2019-06-11 11:26:38 · 194 阅读 · 0 评论 -
ES6篇(3)字符串的扩展
(1)字符串的Unicode表示法\uxxxx的形式表示一个字符,其中xxxx表示字符的Unicode码点这种表示法限于表示\u0000~\uFFFF之间的字符,超过这个范围需要用双字节的形式表示"\uD842\uDFB7"ES6可以将两个字节的码点放入一个大括号内,"\u{20BB7}"目前JavaScript有6中方法表示一个字符:'\z' === 'z' // true'\1...转载 2019-06-11 11:55:06 · 185 阅读 · 0 评论 -
ES6篇(11)--Symbol
(1)概述:ES6引入一种新的原始数据类型Symbol,表示独一无二的值。注:它是JavaScript语言的第七种数据类型,前6种是:undefined,null,布尔值(Boolean)字符串(String),数值(Number),对象(Object)。ES6引入它的目的是解决对象属性名冲突的问题,ES5的对象属性名都是字符串,容易造成属性名的冲突。对象的属性名现在可以有两种类型(原...转载 2019-06-21 11:30:27 · 200 阅读 · 0 评论 -
ES6篇(7)--函数的扩展
(1)函数参数的默认值ES6之前不能为函数的参数指定默认值,ES6允许,直接将参数默认值直接写在参数定义的后面。function log(x, y = 'World') { console.log(x, y);}这种写法除了简洁,还有两个好处,阅读代码的人不用看函数体或文档就知道,哪些参数可以省略,其次,利用将来代码的优化,即使未来的版本在对外接口中,彻底拿掉这个参数,也不会导致以前...转载 2019-06-17 16:47:25 · 113 阅读 · 0 评论 -
ES6篇(15)--Promise 对象
Promise对象1.什么是PromisePromise是异步编程的解决方案。Promise对象代表一个异步操作,有三种状态pending(进行中),fulfilled(成功),rejected(失败).由异步操作的结果来决定当前是哪种状态,其他操作无法改变这个状态;并且状态一旦改变,就不会再变,任何时候都可以得到这个结果。Promise对象的状态改变,只可能有两种:从pending...转载 2019-04-22 18:06:45 · 199 阅读 · 0 评论