es6易错点汇总

2019-08-10  本文已影响0人  静_summer

普通函数和箭头函数的区别:

箭头函数的注意事项及不适用场景

箭头函数的注意事项:

箭头函数一条语句返回对象字面量,需要加括号

箭头函数在参数和箭头之间不能换行

箭头函数的解析顺序相对||靠前

不适用场景:箭头函数的this意外指向和代码的可读性。

对象{fn: () => {this指向window}}

window.addEventListener('click', () => {this指向全局})

promise

pending (等待态)

fulfilled (完成态)

rejected (拒绝态)

then 方法返回一个 promise 对象

若 onFulfilled 、onRejected 返回一个非promise对象、非thenable对象的值 x ,则 promise2 的状态为 fulfilled ,终值为 x

若 onFulfilled 、onRejected 返回一个 promise 对象的值 x ,promise2 的状态、终值、拒因与 x 同步

若 onFulfilled 、onRejected 返回一个 thenable 对象 ,会对 thenable 对象进行展开操作,promise2 的状态、终值、拒因取决于 thenable 对象的 then 方法调用结果

若 onFulfilled 或者 onRejected 抛出一个异常 e ,则 promise2 的状态为 rejected,拒因为 e

如果 promise 的状态变为 fulfilled,then 方法没有注册 onFulfilled

then 方法返回的 promise 对象的状态变为 fulfilled

then 方法返回的 promise 对象的终值与原 promise 对象的终值相同

如果 promise 的状态变为 rejected,then 方法没有注册 onRejected

then 方法返回的 promise 对象的状态变为 rejected

then 方法返回的 promise 对象的拒因与原 promise 对象的拒因相同

(1)

const promise = new Promise((resolve, reject) => {

resolve('success1')

reject('error')

resolve('success2')

})

promise

.then((data) => {

console.log(data)

})

.catch((err) => {

console.log(err)

})

结果:success1

(2)

new Promise((resolve,reject)=>{

console.log(3);

let p = new Promise((resolve, reject)=>{

    console.log(7);

    setTimeout(()=>{

      console.log(5);

      resolve(6);

    },0)

    resolve(1);

});

resolve(2);

p.then((arg)=>{

    console.log(arg);

});

}).then((arg)=>{

console.log(arg);

});

console.log(4);

结果:1

(3)

Promise.resolve(1)

.then(2)

.then(Promise.resolve(3))

.then(console.log)

结果:3 7 4 1 2 5

(4)

const promise = new Promise((resolve, reject) => {

console.log(1)

resolve()

console.log(2)

})

promise.then(() => {

console.log(3)

})

console.log(4)

结果:1 2 4 3

(5)

Promise.resolve(1)

.then((data) => {

console.log(data)

return 2

})

.catch((err) => {

return 3

})

.then((data) => {

console.log(data)

})

结果:1 2

https://juejin.im/post/5cf65860e51d4556be5b3a11#heading-0

es6各知识点汇总

const let

解构

字符串

str='123'

str.padStart(5, 'wer') // 从前重复补全1到str有5个长度

str.padEnd(5, '1') // 从后重复补全1到str有5个长度

str.startWidth('5', 1) // 从前index=1开始找5是否以它开头

str.endWidth('5', 1) // 从后index=length - 1开始找5是否以它结尾

str.trim() // 消除两头空格

str.trimStart() // 消除头部空格

str.trimEnd() // 消除尾部空格

str.includes('5', 1) // 从index=1开始找是否包含5

数值

函数

数组

对象

{

chain () {return super.a}

}

Symbol

Set 和 Map

-s1.entries() / m1.entries // 这些方法是Object对象上的,如果是iterator的类型就有,如果不是只能调用Object.keys(canshu) 这种形式

Proxy

let p = new Proxy({a: 2, b: 4}, {

get (target, key, proxySelf) {},

set (target, key, value, proxySelf) {},

has (target, key) {}, // 拦截 in 操作符,对for in 不起效

construct (target, args, proxySelf) {}, // 拦截new

deleteProperty (target, key) {}, // 拦截delete

defineProperty (target, key, proxySelf) {}, // 拦截Object.defineProperty操作

getOwnPropertyDescriptor (target, key, proxySelf) {}, // 拦截Object.getOwnPropertyDescriptor()

getPropertyOf (target) {}, // 拦截获取对象原型 就是下面这些操作:

        Object.prototype.__proto__

        Object.prototype.isPropertyOf()

        Object.prototype.getPropertyOf()

        Object.prototype.setPropertyOf()

        instanceof

isExtensible (target) {}, // 拦截Object.isExtensible

ownKeys (target) {}, // 拦截获取自身属性

        Object.getOwnPropertyNames()

        Object.getOwnPropertySymbols()

        Object.keys()

        for in

preventExtensions (target) {}, // 拦截Object.preventExtensions()

setPropertyOf (target, proto) {}, // 拦截Object.setPrototypeOf()

})

Reflect

class 和 extend

Class Person () {

b = 123 // 在对象的实例上

constructor (a) {

  this.a = a

}

say () { // 在Person.prototype上

  console.log('say')

}

}

class child extends Person {

constructor (...args) {

  super(...args)

}

}

导入导出

上一篇下一篇

猜你喜欢

热点阅读