ES6 语法小摘

块作用域构造 letconst

  1. let 声明,用法与 var 相同,不过用 let 声明的变量不会被提升,可以将变量的作用域限制在当前代码块中。
  2. 使用 let 声明变量,还可以防止变量的重复声明。
  3. 如果用 const 声明对象,对象本身的绑定不能修改,但对象的属性和值是可以修改的。
  4. 在全局作用域中使用 var 声明的变量或对象,将作为浏览器环境中的 window 对象的属性,这意味着使用 var 很可能无意中覆盖一个已经存在的全局属性
  5. 如果在全局作用域下使用 letconst,则会在全局作用域下创建一个新的绑定,但该绑定不会成为 window 对象的属性

模板字面量

  1. 模板字面量的基础语法就是用反引号 (`) 替换字符串的单、双引号
  2. 模板字面量如果需要在字符串中添加新行,只需要在代码中直接换行
  3. 占位符由一个左侧的 ${ 和右侧的 } 符号构成

默认参数

  1. ES6 中,简化了为形参提供默认值的过程,可以直接在参数列表中为形参指定默认值

rest 参数

  1. 在函数的命名参数前添加 3 个点,就表明这是一个 rest 参数,rest 参数是一个数组,包含自它之后传入的所有参数

展开运算符

  1. 展开运算符在语法上与 rest 参数相似,也是 3 个点,它可以将一个数组转换为各个独立的参数,也可以取出对象的所有可遍历属性
  2. 展开运算符可以用来复制数组
let arr1 = [1, 2, 3];
# arr2 与 arr1 是同一个数组对象
let arr2 = arr1;    
# arr3 与 arr1 是两个不同的数组对象
let arr3 = [...arr1];
  1. 展开运算符也可以用来合并数组
let arr1 = ['a'];
let arr2 = ['b', 'c'];
console.log([...arr1, ...arr2]);
  1. 展开运算符也可以用于取出对象的所有可遍历属性,复制到当前对象中
let book ={
    title: "Vue.js 从入门到实践",
    price: 98
}

let bookDetail = {...book, desc: "a fine book"}
console.log(bookDetail);

对象字面量语法扩展

  1. 定义对象方法时可以省略冒号和 function 关键字
var car = {
    color: "red",
    doors: 4,
    showColor(){
        console.log(this.color);
    }
}
car.showColor();
console.log(car.showColor.name);
  1. Javascript 中,访问对象的属性,可以通过点号(.) 或方括号([]),如果属性名包含了特殊字符或中文,或者需要通过计算得到属性名,则只能使用方括号。

解构函数

  1. 如果使用 varletconst 声明解构变量,则必须提供初始化程序,即等号右侧必须提供值
  2. 如果变量之前已经声明,之后想要用解构语法给变量赋值,那么需要用圆括号包裹整个解构赋值语句
let book = {
    title: "Vue.js 从入门到实践",
    isbn: "987677898",
    price: 98
}
let title, isbn, price;
({title, isbn, price} = book);
  1. 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);
  1. 与对象解构不同,如果为已经声明过的变量进行数组解构赋值,不需要使用圆括号包裹解构赋值语句
let arr = [1, 2, 3];
let a, b, c;
[a, b, c, d = 0] = arr;

模块

  1. 导出可以分别导出,也可以将导出语句集中书写在模块的尾部。当导出内容较多时,采用后者会更加清晰;
  2. 没有添加 export 关键字而定义的变量和类在模块外是不允许访问的。
  3. 一个模块可以导出且只能导出一个默认值,默认值是通过使用 default 关键字指定的单个变量、函数或类。

Promise

  1. 每个 Promise 都会经历一个短暂的生命周期,先是处于进行中(pending)的状态,此时操作尚未完成,所以它也是未处理的(unsettled),一旦异步操作执行结束,Promise 则变为已处理(settled)的状态
  2. Promise 对象的状态改变,只有两种可能:从 pending 变为 fulfilled,或者从 pending 变为 rejected
  3. 通常是将 then() 方法和 catch() 方法一起使用来对异步操作的结果进行处理,这样能更清楚地指明操作结果是成功还是失败
promise.then(function(value){
    //完成
    console.log(value);
}).catch(function(err){
    //拒绝
    console.error(err.message);
}
  1. Promise 链式调用时,有一个重要特性就是可以为后续的 Promise 传递数据
  2. Javascript 中的 try/catch 代码块不同,如果没有使用 catch() 方法指定错误处理的回调函数,那么 Promise 对象抛出的错误不会传递到外层代码,即不会有任何反应。
本作品采用《CC 协议》,转载必须注明作者和本文链接
CodeFarmer
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!