ECMAScript 6新特性速览

本文介绍了ES6中的关键新特性,包括let和const的作用与区别,模板字符串的使用,函数的默认参数和箭头函数,对象和数组的简化语法,for...of循环,模块导入导出,Promise的异步处理,解构赋值,Set数据结构,类的定义,展开运算符,async/await以及Symbol的独特应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ES6的新增的方法

一、新增的 let 和 const

在 es6 中通常使用 let 和 const 来声明,let 表示变量,const 表示常量

1.1 特点

let 和 const 都是块级作用域,是以 {} 代码块作为作用域范围,只能在代码块里面内使用,不存在变量提升,只能先声明再使用,不能重复声明

const 声明是一个常量,在声明的时候必须赋值,而且是不能改变的(如果是一个对象,对象包含的属性可以进行更改,就是说对象所指向的地址不变,而变量成员是可以改变的)

补充:在js中,数据类型分为两种,基本数据类型和引用类型

普通数据类型有Number,String,Boolean,Null,Undefined五种

引用数据类型有:Function,Object,Array

对象是引用类型,当对象的内容发生改变,对象所指向的地址也不会改变

二、模板字符串

在es6中引入了模板字符串的概念,用 `` 来进行标识,也可以作为普通字符串来使用,也可以定义多行字符串,在字符串内可以嵌套变量,js表达式,函数,但变量,js表达式,函数需要写到 ${}

三、函数的扩展

3.1 可以给函数参数赋默认值

在定义函数的时候,给参数赋默认值,在不传参数的时候,使用这个默认值

3.2 箭头函数

写法 (参数)=>{...} ,当函数体只有一句代码时,连 {} 都可以省去,只有一个形参时,() 可以省去

特点:在箭头函数里,它没有自己的this,它的 this 是指向父级函数,没有的话指向的是 window

四、对象的扩展

4.1 属性的简写

如过对象的键值对变量名相等时,可以进行简写,只写一个

var name = 'xxx';
var person = {name}; // 等同于var person = {name : name}

4.2 Object.keys()

获取对象的所有属性名,并返回一个数组

4.3 Object.assign()

对多个对象进行合并,以第一个对象为目标将新的属性加到第一个对象上,如果合并的对象有相同的属性,后面的会覆盖前面的

五、for of 循环

var arr = [1,2,3,4];
for (var i of arr){
   console.log(v);  //  1/2/3/4
}

六、import 和 export

在es6中原生js支持模块化,import 为加载模块,export 为导出模块,importexport 只能在模块的顶部不能在模块中

使用 export 导出的模块,在导入的时候加上{},名字也要和导出的模块名字一致

使用 export default 默认导出时,在导入命名的时候可以随意命名,需要注意的是,在一个js文件中只能有一个默认导出

七、Promise 对象

Promise 对象是一种异步编程的解决方案,将异步操作以同步的流程表达出来,避免了层层嵌套的回调函数,专注于解决异步处理的回调地狱问题。

Promise 构造函数带有一个 resolve(解析)和 reject(拒绝)两个参数的回调。在回调中执行一些操作(例如异步),如果一切正常调用 resolve() 否则使用 reject(),已经实例化化过的 Promise 对象可以调用 promise.then() 方法接受两个参数:onResolve 和 onReject,分别代表当前 Promise 对象在成功时和失败时的回调函数。

7.1 Promise的基本使用

const promise = new Promise((resove,reject)=>{
   if (...) {
       resove()  // 代码正常
     }
   else {
       reject()  // 代码错误
     }
});

promise.then((res) => {
   //代码走了resove()执行这里
},(err) => {
   //代码走了reject()执行这里
})

注意:除了在then里可以捕获错误时回调,还可以使用catch()。代码如下:

const promise = new Promise((resove,reject)=>{
  if(...) {
      resove()  // 代码正常
    }
  else {
      reject()  // 代码错误
    }
});
promise.then((res) => {
  //代码走了resove()执行这里
}).catch((err) => {
  //代码走了resove()执行这里
})

7.2 promise 的三种状态

Fulfilled 为成功的状态,Rejected 为失败的状态,Pending 是初始状态

在Fulfilled 状态下,会调用 then 方法,在 Rejected 状态下会调用 catch 方法

7.3 promise 的其他两个方法

promise.all()

Promise.all([p1, p2, p3])用于将多个 promise 实例,包装成一个新的 promise 实例,返回的实例就是普通的 promise
它接收一个数组作为参数

当接收的全部 promise 状态都为 Fulfilled 的时候,返回的 promise 状态才为 Fulfilled,执行 then,如果有一个为 Rejected,就执行 catch,返回的是发生第一个 Rejected 的 promise 的结果

promise.race()

类似于Promise.all(),区别在于它有任意一个完成就算完成

八、解构赋值

解构赋值是对赋值运算符的扩展,针对对象或数组进行模式匹配,对其中变量赋值。注意要一一对应,如果有对应不上的值,它的值就是 undefined

8.1数组的解构赋值

let [a, b, c] = [1, 2, 3];  //a ==1, b == 2, c == 3

8.2对象的结构赋值

let {a, b} = {a:11, b:22};  // a == 11, b == 22

九、Set数据结构

set数据结构类似于数组,所有的值都是唯一的,没有重复的值,它本身就是一个数据结构,可以用于数组去重

十、class

在es6中,不像es5一样使用原型加构造函数实现继承,而是引入了 class 的概念,写法更简单,更容易实现继承

十一、展开运算符(…)

展开运算符可以将对象或数组里面的值进行展开,整合到一个变量

十二、Async,Await

使用async,await,搭配promise,可以通过编写形似同步的代码来实现异步流程,async用于申明一个异步函数,而await用于等待一个异步方法执行完毕

十三、Symbol

Symbol:新的数据类型,表示一个不可重复的值,不是函数,不能通过 new 创建
作用:定义不会重名的变量;定义常量;内置 Symbol 的值( Symbol.iterator (返回容器的迭代器方法),需要使用reflect来遍历获取所有的属性)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值