ES6 语法小摘
块作用域构造 let
和 const
let
声明,用法与var
相同,不过用let
声明的变量不会被提升,可以将变量的作用域限制在当前代码块中。- 使用
let
声明变量,还可以防止变量的重复声明。 - 如果用
const
声明对象,对象本身的绑定不能修改,但对象的属性和值是可以修改的。 - 在全局作用域中使用
var
声明的变量或对象,将作为浏览器环境中的window
对象的属性,这意味着使用var
很可能无意中覆盖一个已经存在的全局属性 - 如果在全局作用域下使用
let
和const
,则会在全局作用域下创建一个新的绑定,但该绑定不会成为window
对象的属性
模板字面量
- 模板字面量的基础语法就是用反引号 (`) 替换字符串的单、双引号
- 模板字面量如果需要在字符串中添加新行,只需要在代码中直接换行
- 占位符由一个左侧的
${
和右侧的}
符号构成
默认参数
- 在
ES6
中,简化了为形参提供默认值的过程,可以直接在参数列表中为形参指定默认值
rest
参数
- 在函数的命名参数前添加 3 个点,就表明这是一个
rest
参数,rest
参数是一个数组,包含自它之后传入的所有参数
展开运算符
- 展开运算符在语法上与
rest
参数相似,也是 3 个点,它可以将一个数组转换为各个独立的参数,也可以取出对象的所有可遍历属性 - 展开运算符可以用来复制数组
let arr1 = [1, 2, 3];
# arr2 与 arr1 是同一个数组对象
let arr2 = arr1;
# arr3 与 arr1 是两个不同的数组对象
let arr3 = [...arr1];
- 展开运算符也可以用来合并数组
let arr1 = ['a'];
let arr2 = ['b', 'c'];
console.log([...arr1, ...arr2]);
- 展开运算符也可以用于取出对象的所有可遍历属性,复制到当前对象中
let book ={
title: "Vue.js 从入门到实践",
price: 98
}
let bookDetail = {...book, desc: "a fine book"}
console.log(bookDetail);
对象字面量语法扩展
- 定义对象方法时可以省略冒号和
function
关键字
var car = {
color: "red",
doors: 4,
showColor(){
console.log(this.color);
}
}
car.showColor();
console.log(car.showColor.name);
- 在
Javascript
中,访问对象的属性,可以通过点号(.) 或方括号([]),如果属性名包含了特殊字符或中文,或者需要通过计算得到属性名,则只能使用方括号。
解构函数
- 如果使用
var
、let
或const
声明解构变量,则必须提供初始化程序,即等号右侧必须提供值 - 如果变量之前已经声明,之后想要用解构语法给变量赋值,那么需要用圆括号包裹整个解构赋值语句
let book = {
title: "Vue.js 从入门到实践",
isbn: "987677898",
price: 98
}
let title, isbn, price;
({title, isbn, price} = book);
- 当
book
对象中没有salesVolumn
属性,或者该属性值为undefined
时,则使用预设的默认值。如果希望在使用解构赋值时,使用与对象属性名不同的局部变量名,那么可以采用“属性名:局部变量名”的语法形式
let book = {
title: "Vue.js 从入门到实战",
isbn: "98787733",
price: 98
}
let {title: bookTitle, isbn: bookIsbn='test'} = book;
console.log(bookTitle);
console.log(bookIsbn);
- 与对象解构不同,如果为已经声明过的变量进行数组解构赋值,不需要使用圆括号包裹解构赋值语句
let arr = [1, 2, 3];
let a, b, c;
[a, b, c, d = 0] = arr;
模块
- 导出可以分别导出,也可以将导出语句集中书写在模块的尾部。当导出内容较多时,采用后者会更加清晰;
- 没有添加
export
关键字而定义的变量和类在模块外是不允许访问的。 - 一个模块可以导出且只能导出一个默认值,默认值是通过使用
default
关键字指定的单个变量、函数或类。
Promise
- 每个
Promise
都会经历一个短暂的生命周期,先是处于进行中(pending
)的状态,此时操作尚未完成,所以它也是未处理的(unsettled
),一旦异步操作执行结束,Promise
则变为已处理(settled
)的状态 Promise
对象的状态改变,只有两种可能:从pending
变为fulfilled
,或者从pending
变为rejected
- 通常是将
then()
方法和catch()
方法一起使用来对异步操作的结果进行处理,这样能更清楚地指明操作结果是成功还是失败
promise.then(function(value){
//完成
console.log(value);
}).catch(function(err){
//拒绝
console.error(err.message);
}
Promise
链式调用时,有一个重要特性就是可以为后续的Promise
传递数据- 与
Javascript
中的try/catch
代码块不同,如果没有使用catch()
方法指定错误处理的回调函数,那么Promise
对象抛出的错误不会传递到外层代码,即不会有任何反应。
本作品采用《CC 协议》,转载必须注明作者和本文链接