![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ES6
文章平均质量分 85
SikW_04_27
这个作者很懒,什么都没留下…
展开
-
Module的语法
Module的语法概述为了JS模块化管理严格模式ES6 的模块自动采用严格模式,不管你有没有在模块头部加上"use strict";严格模式的限制:变量必须声明后再使用函数的参数不能有同名属性,否则报错不能使用with语句不能对只读属性赋值,否则报错不能使用前缀 0 表示八进制数,否则报错不能删除不可删除的属性,否则报错不能删除变量delete prop,会报错,只能删除属性delete global[prop]eval不会在它的外层作用域引入变量eval和arguments原创 2021-07-18 20:43:59 · 125 阅读 · 0 评论 -
Class的继承
Class的继承简介Class可以通过extends关键字实现继承,这比es5通过修改原型链实现继承,要清晰和方便许多class Point {}class ColorPoint extends Point {} //继承了Point类的所有属性和方法//由于没有部署任何代码,所以这两个类完全一样,等于复制了一个Point类class ColorPoint extends Point { constructor(x, y, color) { super(x, y); // 调原创 2021-07-18 20:43:23 · 107 阅读 · 0 评论 -
Class的基本语法
Class的基本语法简介类的由来JavaScript语言中,生成实例对象的传统方法是通过构造函数为了更接近传统语言,引入了class,作为对象的模板,通过这个关键字,可以定义类//JS传统方法function Point(x, y) { this.x = x; this.y = y;}Point.prototype.toString = function () { return '(' + this.x + ', ' + this.y + ')';};var p = new原创 2021-07-18 20:42:46 · 802 阅读 · 0 评论 -
async函数
async函数含义async是Generator的语法糖async函数就是将 Generator 函数的星号(*)替换成async,将yield替换成awaitconst gen = function* () { const f1 = yield readFile('/etc/fstab'); const f2 = yield readFile('/etc/shells'); console.log(f1.toString()); console.log(f2.toString())原创 2021-07-18 20:42:14 · 104 阅读 · 0 评论 -
Generator函数的异步应用
Generator函数的异步应用传统方法回调函数事件监听发布/订阅Promise对象基本概念异步一个任务不是连续完成的,可以理解成该任务被人为分成两段,先执行第一段,然后转去执行其他任务,等做好了准备,再回过头执行第二段回调函数把任务的第二段单独写在一个函数里面,等到重新执行这个任务的时候,就直接调用这个函数Promise多个回调函数嵌套会形成回调函数地狱,难以修改而Promise允许将回调地狱的嵌套,改成链式调用Generator函数协程协程:多个线程互相协作,完成原创 2021-07-18 20:41:32 · 75 阅读 · 0 评论 -
Generator 函数的语法
Generator 函数的语法简介Generator函数是ES6提供的一种异步编程解决方案,语法行为与传统函数完全不同语法:Generator函数是一个状态机,封装了多个内部状态形式:Generator函数是一个普通函数,特征如下:function关键字和函数名之间有一个星号*函数体内部使用yield表达式,定义不同的内部状态Generator函数的调用方法跟普通函数一样,在函数名后面加一对圆括号但是调用Generator函数后,该函数并不执行,返回的也不是函数的运原创 2021-07-18 20:41:06 · 191 阅读 · 0 评论 -
Iterator 和 for...of 循环
Iterator 和 for…of 循环遍历器的概念遍历器:遍历器是一个接口,为各种不同的数据结构(Array、Object、Map、Set)提供统一的访问机制,任何数据只要部署了Iterator接口,就可以完成遍历操作Iterator的作用:为各种数据结构,提供一个统一的、简便的访问接口使得数据结构的成员能够按某种次序排列ES6 创造了一种新的遍历命令for...of循环,Iterator 接口主要供for...of消费Iterator的遍历过程:创建一个指针对象,指向当前数据原创 2021-07-18 20:40:19 · 94 阅读 · 0 评论 -
promise
PromisePromise的含义Promise是异步编程的一种解决方法Promise对象可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数特点:对象的状态不受外界影响。Promise对象代表一个异步操作,有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败),只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise对象的状态改变,只有两种可能:从pe原创 2021-07-18 20:39:27 · 73 阅读 · 0 评论 -
SET 和Map数据结构
SET 和Map数据结构Set基本用法Set是一个新的数据结构,类似于数组,但是成员的值都是唯一的,没有重复的值Set本身是一个构造函数,用来生成Set数据结构const s = new Set();[2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x));//通过add方法向Set数据结构中加入成员for (let i of s) { console.log(i);}// 2 3 5 4 表明不会添加重复的值Set也可以接收一个数组作为参原创 2021-07-18 20:38:43 · 63 阅读 · 0 评论 -
Symbol
Symbol概述ES5 的对象属性名都是字符串,这容易造成属性名的冲突。比如,你使用了一个他人提供的对象,但又想为这个对象添加新的方法(mixin 模式),新方法的名字就有可能与现有方法产生冲突。如果有一种机制,保证每个属性的名字都是独一无二的就好了,这样就从根本上防止属性名的冲突。这就是 ES6 引入Symbol的原因ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值。它是 JavaScript 语言的第七种数据类型,前六种是:undefined、null、布尔值(Boolea原创 2021-07-18 20:37:44 · 61 阅读 · 0 评论 -
对象的新增方法
对象的新增方法Object.is()ES5 比较两个值是否相等,只有两个运算符:相等运算符(==)和严格相等运算符(===)。它们都有缺点,前者会自动转换数据类型,后者的NaN不等于自身,以及+0等于-0。JavaScript 缺乏一种运算,在所有环境中,只要两个值是一样的,它们就应该相等ES6 提出“Same-value equality”(同值相等)算法,用来解决这个问题。Object.is就是部署这个算法的新方法。它用来比较两个值是否严格相等,与严格比较运算符(===)的行为基本一致O原创 2021-06-16 02:34:56 · 270 阅读 · 0 评论 -
对象的扩展
对象的扩展属性的简洁表示法ES6 允许在大括号里面,直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁const foo = 'bar';const baz = {foo};baz // {foo: "bar"}// 等同于const baz = {foo: foo};//上面代码中,变量foo直接写在大括号里面。这时,属性名就是变量名, 属性值就是变量值。//下面是另一个例子function f(x, y) { return {x, y};}// 等同于func原创 2021-06-14 00:31:25 · 73 阅读 · 0 评论 -
数组的扩展
数组的扩展扩展运算符扩展运算符(spread)是三个点(...)。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列console.log(...[1, 2, 3])// 1 2 3console.log(1, ...[2, 3, 4], 5)// 1 2 3 4 5[...document.querySelectorAll('div')]// [<div>, <div>, <div>]该运算符主要用于函数调用function原创 2021-06-13 11:40:59 · 95 阅读 · 0 评论 -
函数的扩展
函数的扩展函数参数的默认值基本用法ES6 之前,不能直接为函数的参数指定默认值,只能采用变通的方法function log(x, y) { y = y || 'World'; console.log(x, y);}log('Hello') // Hello Worldlog('Hello', 'China') // Hello Chinalog('Hello', '') // Hello WorldES6 允许为函数的参数设置默认值,即直接写在参数定义的后面functi原创 2021-06-10 02:20:34 · 89 阅读 · 0 评论 -
数值的扩展
数值的扩展二进制和八进制的表示法ES6 提供了二进制和八进制数值的新的写法,分别用前缀0b(或0B)和0o(或0O)表示0b111110111 === 503 // true0o767 === 503 // true从 ES5 开始,在严格模式之中,八进制就不再允许使用前缀0表示,ES6 进一步明确,要使用前缀0o表示// 非严格模式(function(){ console.log(0o11 === 011); //es6的八进制和es5的八进制})() // true//原创 2021-06-09 00:03:14 · 427 阅读 · 0 评论 -
正则的扩展
正则的扩展RegExp构造函数ES5中的构造函数的参数有两种情况参数是字符串,这时第二个参数表示正则表达式的修饰符(flag)var regex = new RegExp('xyz', 'i');// 等价于var regex = /xyz/i;参数是一个正则表示式,这时会返回一个原有正则表达式的拷贝var regex = new RegExp(/xyz/i);// 等价于var regex = /xyz/i;ES5不允许第二种情况使用第二个参数添加修饰符,否则原创 2021-06-08 01:21:32 · 71 阅读 · 0 评论 -
字符串的新增方法
字符串的新增方法String.fromCodePoint()ES5 提供String.fromCharCode()方法,用于从 Unicode 码点返回对应字符,但是这个方法不能识别码点大于0xFFFF的字符String.fromCharCode(0x20BB7)// "ஷ" 最高位2被舍弃了,最后返回码点U+0BB7对应的字符,而不是码点U+20BB7对应的字符ES6 提供了String.fromCodePoint()方法,可以识别大于0xFFFF的字符,弥补了String.fromC原创 2021-06-06 11:13:22 · 84 阅读 · 0 评论 -
ES6变量
变量varvar 声明作用域使用var操作符定义的变量会成为他的函数的局部变量在函数内定义变量时省略var操作符,可以创建一个全局变量(一般不用)在局部定义域中定义全局变量很难维护,会造成困惑,在严格模式下会抛出ReferenceError可以在一条语句中用逗号分隔多个变量var变量提升使用关键字声明的变量会自动提升到函数作用域的顶部,反复提升多个变量也没有问题function foo(){ console.log(age); var age = 10;}foo();原创 2021-06-06 02:00:52 · 101 阅读 · 0 评论 -
字符串的扩展
字符串的扩展字符的Unicode表示法ES6 加强了对 Unicode 的支持,允许采用\uxxxx形式表示一个字符,其中xxxx表示字符的 Unicode 码点,但是,这种表示法只限于码点在\u0000~\uFFFF之间的字符。超出这个范围的字符,必须用两个双字节的形式表示"\uD842\uDFB7"// "????""\u20BB7"// " 7",超出会按\u20BB+7处理改进:只要将码点放入大括号,就能正确解读该字符"\u{20BB7}"// "????"字原创 2021-06-06 01:58:38 · 46 阅读 · 0 评论 -
变量的解构赋值
变量的解构赋值数组的解构赋值从数组中提取值,按照对应位置,对变量赋值let [a, b, c] = [1, 2, 3];本质上,这种写法属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值。下面是一些使用嵌套数组进行解构的例子let [foo, [[bar], baz]] = [1, [[2], 3]];foo // 1bar // 2baz // 3let [ , , third] = ["foo", "bar", "baz"];third // "ba原创 2021-06-05 03:29:05 · 479 阅读 · 0 评论