JavaScript类型转换

在Javascript中类型转换只有三种情况:

  1. 转换为布尔值
  2. 转换为数字
  3. 转换为字符串

转换为原始类型

对象在转换类型的时候,会执行原生方法 ToPrimitive 

算法如下:

  1. 如果已经是 原始类型 ,则返回当前值
  2. 如果需要转 字符串 则先调用toString方法,如果此时是 原始类型 则直接返回,否则再调用valueOf方法并返回结果
  3. 如果不是 字符串,则先调用valueOf方法,如果此时是 原始类型 则直接返回,否则再调用toString方法并返回结果
  4. 如果都没有 原始类型 返回,则抛出 TypeError 类型错误

一道面试题:a可以同时==1 && ==2 && ==3吗?

 

const a = {
  arr: [3, 2, 1],
  valueOf() {
    console.group('valueOf')
    console.log(this.arr)
    console.groupEnd('valueOf')
    return this.arr.pop()
  }
}
if (a == 1 && a == 2 && a == 3) {
    console.log('yes!')
}

 

当然还有其他的实现方式:

比如:

对getter的劫持

当对象属性在进行查询时会被调用get方法

 

const a = new Proxy({}, {
  val: 1,
  get() {
    return () => this.val++
  }
})
if (a == 1 && a == 2 && a == 3) {
    console.log('yes!')
}

 

posted @ 2020-03-23 17:20  一江西流  阅读(216)  评论(0编辑  收藏  举报