ES6

2019-03-26  本文已影响0人  Ga611
let , const
for(let i=0;i<3;i++){
  //此时i的作用域就在括号内
  //但js会自动帮用户在花括号内创建一个同名临时变量i,使得i在打印时不会固定变为3
  button[i].onclick = ()=>{
    console.log(i)
  }
}
Symbol

当我不关心一个一个变量的值,只希望区分该变量与其他变量时
x = Symbol()

默认参数值
let arr = Array.from(arguments)
let arr = [...arguments]
let [a,b] = [1,2];
[a,b] = [b,a]
console.log(a,b) //2,1

需要特别注意的是,在这种情况下,值交换的前一句结束分号一定不能省略,否则会出错

var obj = {x:{b:1}}
var {x:{b}} = obj
console.log(b) //1
//先 x = obj.x 而后 b = x.b
对象属性增强
模块化
import defaultExport from "module-name";
import * as name from "module-name";
import { export } from "module-name";
import { export as alias } from "module-name";
import { export1 , export2 } from "module-name";
import { foo , bar } from "module-name/path/to/specific/un-exported/file";
import { export1 , export2 as alias2 , [...] } from "module-name";
import defaultExport, { export [ , [...] ] } from "module-name";
import defaultExport, * as name from "module-name";
import "module-name";
export { name1, name2, …, nameN };
export default expression;
export * from …;//模块透传
class
function Animal(){
  this.a = 1
}
Animal.prototype.move = function(){}
function Human(){
  Animal.apply(this,aruguments)
  this.b = 2
}
let f = function(){}
f.prototype = Animal.prototype
Human.prototype = new f()
Human.prototype.constructor = Human
转自知乎《JS的new到底是干什么的》——方应杭
class Human extends Animal{
  constructor(){
    super()
  }
}
class Human{  
  constructor(age){
    this._age = age
  }
  get age (){
    return this._age
  }
}
var human = new Human(19)
console.log(human.age) // 19
class Human{  
  constructor(name){
    this._name = name
  }
  set name (value){
    if(value>4){console.log('名字长度不能超过4个字')}
    else{this._name = value}
  }
}
var human = new Human('yyh')
human.name('哈哈哈哈哈哈哈') //名字长度不能超过4个字

promise

function fn (){
  return new Promise((resolve,reject)=>{
    if(x){resolve()}
    else{reject()}
}
function rs1(){
  //...
  if(x){return Promise.resolve()//如果不写明返回值,默认返回resolve 
  }else{ return Promise.reject()}
}

}
function rj1(){
   if(x){return Promise.resolve()//如果不写明返回值,默认返回resolve 
  }else{ return Promise.reject()}
}
fn().then(rs1,rj1)
promise.catch()
// bad
promise
  .then(function(data) {
    // success
  }, function(err) {
    // error
  });

// good
promise
  .then(function(data) { //cb
    // success
  })
  .catch(function(err) {
    // error
  });

上面代码中,第二种写法要好于第一种写法,理由是第二种写法可以捕获前面then方法执行中的错误。应该说如果想要捕获then方法执行中的错误,应该这么写

promise
  .then(function(data) {
    // success
  }, function(err) {
    // error
  }).then(function(data){},function(err){});

then的第二个参数,只能处理上一层函数的错误,而不能处理上上层的错误,所以第二种写法优于第一种写法

Promise.prototype.finally()
Promise.all()
promise.race()

async&await

上一篇下一篇

猜你喜欢

热点阅读