ES6的新特征

1、ES6

ES6是ECMAScript 6的简称,新增了很多的语法规范,可以对写法和开发有很大的帮助。它的目标是使JavaScript语言可以用于编写复杂的大型应用程序,成为企业级开发语言。

什么是ECMAScript?
ECMAScript是浏览器脚本语言的规范,是一个语言的标准,而JavaScript则是规范具体的实现。

ES的发展史说明
1996ES1.0
1998ES2.0
1999ES3.0
2007ES4.0 大的更新,大的改动。开发者完全的不认同,过于激进被废除
2008ES3.1 严重缩水的4.0 名字Harmony
2009ES5.0 正式发布,草案直接指向ES6.0
2013ES6.0 草案制定完成
2013.12ES6.0草案发布
2015.06ES6.0正式发布 ES2015
2016ES就不再使用版本号命名了,而是使用年份的代号了 ES7

2、let和const

let声明变量
1、let声明的变量不会挂在window中,不会造成全局变量的污染
2、let是不允许重复声明的
3、let不会有提前声明(只是人为看到的效果,实际上是有声明提前的,提前到临时性的死区中:Cannot access ‘num’ before initialization)

之前有个很经典的问题关于i的值的问题:
在这里插入图片描述
在这里插入图片描述
我们所需要的效果是点击哪一个就输出哪一个的值,那么我们来看看控制台输出的是什么
在这里插入图片描述
没有看错全部都是5,我们在没有学习ES6之前我们只有一种方法可以解决,那就是包裹一个函数,产生作用域,我们现在只需要讲var关键字改成let即可解决这个问题,有没有觉得很方便呢?
在这里插入图片描述
在这里插入图片描述

const声明变量:
声明的是常量不能被修改,类似于C语言中的const
前面几点跟let一致。
1、不允许被修改(不允许改变内存空间的地址)
2、const声明和赋值必须一次性完成,并且后期不允许改变存储空间的地址
常量的效率比变量要高。
在这里插入图片描述
在这里插入图片描述
可以看到a的值是不允许被修改的

3、字符串模板

在以前的字符串之上增加一些功能,可以添加串,可以使用转义字符,可以嵌套
在这里插入图片描述
来看看简单的用法:
在这里插入图片描述
在这里插入图片描述

4、函数参数默认值

ES6之前我们只能通过判断来给函数设置默认值:
在这里插入图片描述
在这里插入图片描述
ES6允许给函数设置默认值,如下图:
在这里插入图片描述
在这里插入图片描述
注意点:
不要传递null,null在数学中默认为0
参数默认值可以传递表达式,不能传递语句
只要给函数加上了参数默认值,该函数就自动变成严格模式
形参和let,const一样,有自己的作用域,根据声明的顺序,会产生临时性死区。

5、箭头函数

语法:
箭头函数是一个函数表达式,理论上,任何使用函数表达式的地方都可以改成箭头函数
(参数1,参数2…) => { 函数体 }
说到箭头函数我们要注意this 的指向问题:
1、对象调用函数,this指向对象
2、直接调用函数,this指向window
3、如果使用了new关键字,this指向新创建的对象
4、如果使用apply、call、bind、this指向绑定的数据
5、如果是DOM事件函数,this指向事件源

箭头函数的简写:
在这里插入图片描述
注意:
箭头函数中没有this,argument,new.target,如果要强行使用,则指向函数外层对应的this,argument,new.target
箭头函数没有原型,所以说占用的空间非常小,不能当成构造函数来使用

6、class的用法

在这里插入图片描述
Constructor方法:
Constructor方法是类的默认方法,通过new关键字生成对象的实例,自动调用该方法,一个类必须有constructor方法,如果没有显示定义,一个空的constructor方法会被默认添加
Constructor(){ }
类的实例对象必须通过new关键字,如果忘记加上new,将会报错

extends继承的用法:
在这里插入图片描述
继承方法:
Class的继承通过关键字extends关键字实现继承。
Super:表示父类的构造函数,用来新建父类的this对象,子类必须在constructor方法中调用super方法,否则会报错。

Super可以当作构造函数来使用,也可以当成对象来使用。
第一种: super作为函数调用时,代表父类的构造函数
第二种:super作为对象时,指向父类的原型对象

注意:
1、类的声明不会被提前,和let,const一样,有临时性死区
2、类的所有代码全都是在严格模式中执行
3、类的所有方法都是不可枚举的
4、类的所有方法都无法当成构造函数直接使用
5、类的构造器必须使用new来调用

7、Symbol

ES6引进了一种新的原始数据类型Symbol,表示独一无二的值,给对象去新增私有属性的,只有在对象内部进行访问,它是JavaScript语言的第七种数据类型,前六种是:undefined、null、Boolean、String、Number、Object。
符号的特点:
1、没有字面量写法
2、新的数据类型,typeof返回的是Symbol
在这里插入图片描述
3、每次去调用symbol函数得到的符号永远不会相等,不管符号描述是否相同
在这里插入图片描述
4、符号可以作为对象的属性名使用,这种属性名叫符号属性
在这里插入图片描述
在这里插入图片描述
5、可以通过设计,让外面无法访问到

6、符号属性不能被枚举
在这里插入图片描述
在这里插入图片描述
7、符号属性无法被隐式转换,数学运算,字符拼接都是不行的,可以进行内部的显示转换。
在这里插入图片描述在这里插入图片描述

共享符号:
Symbol.for(“符号的描述”) 如果符号描述相等 ,则可以得到同一个符号
在这里插入图片描述
在这里插入图片描述

知名符号:
特殊含义的共享符号,通过symbol的配置得到的
1、Symbol.hasInstance
2、Symbol.isConcatSpreadable 会对数组方法产生影响
3、Symbol.toPrimitive
4、Symbol.toString 可以影响Object.prototype.toString的返回值

8、Promise对象

Promise是异步变成的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。
回调:
运行某个函数实现某个功能的时候,传入一个函数作为参数,当发生某件事情的时候,会执行该函数,那么有了回调之后,频繁的回调会形成回调地狱。回调地狱就是某个异步操作需要等待之气你的异步操作完成,无论回调的事件还是其他函数,都会陷入不间断的嵌套
简单用法:
在这里插入图片描述
浏览器的五条线程:
1、js线程(主线程) 负责去执行栈顶的代码
2、GUI线程 js线程和GUI线程会相互等待
3、事件监听线程 负责监听各种事件
4、计时线程 负责定时器
5、网络线程 各种网络请求

当上面的线程发生了某些事情的时候,如果该线程发生,这件事情有处理程序,它会将该程序加入到一个事件队列中,当JS引擎发现,执行栈没有任何内容,会将事件队列的第一个函数加入到执行栈中执行。

事件队列分为两种: 宏队列和微队列,微队列相当于一个VIP
宏任务:计时器 事件回调 http请求
微任务:Promise MutationObserver
当执行栈清空时,JS引擎首先会将微队列的所有任务依次执行。如果没有微任务,将执行宏任务

Promise对象特点:
对象的状态不会受外界影响,Promise对象代表一个异步操作,有三种状态.
pending:挂起(等待) 处于未决阶段,表示事情还是在挂起,最后的结果没有出来 未决阶段有权利决定事情的走向,未决阶段可以决定事情走向最终的状态
resolved:已处理 处于已决阶段,表示整个事情已经出现结果,并且可以按照正常的逻辑进行下去的结果。把事情推向resolved状态的过程,可能会传递一些数据
rejected:已拒绝 处于已决阶段,表示整个事情已经出现结果,并且是一个无法按照正常逻辑进行下去的结果。把事情推向rejected状态的过程,可能会传递一些数据,这些数据一般为错误信息。

无论是哪个阶段哪个状态,都是不可逆的。resolved这是一个正常的已决状态,后续处理表示为threnable。rejected这是一个非正常的已决状态,后续处理表示为catchable

Promise的方法:
then():
then方法的第一个参数是resolved状态的回调函数,第二个参数(可选)是rejected状态的回调函数,then方法返回的是一个新的promise实例,可以采用链式写法,then方法后面再调用另一个then方法
在这里插入图片描述
在这里插入图片描述
catch():
异步对象抛出错误,状态就会变成rejected,就会调用catch方法指定的回调函数,处理这个错误。
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值