通过面试题学JavaScript知识(1)

// a 是多少的时候 可以让下面的打印ok
if(a == 1 && a == 2 && a ==3){
  console.log('ok')  
}

  分析1:

    == 比较,如果左右左右两边数据类型不一样  对象 == 字符串  把对象转为字符串,剩下的情况都要转数字

  分析2:

    基本数据类型转数字,默认隐式调用Number()来处理,所以此处a必定不能是基本数据类型

  分析3:

   对象转数字;先转为字符串(先调用valueOf ,获取原始值,如果原始值不是基本类型,继续调用toString ),然后把字符串转数字 

    所以答案有以下三种

  

var a = {
  i:1,
  valueOf(){
    return this.i++
  }
}

  第二种

var a = [1,2,3]
a.toString = a.shift;
// 当a去比较的时候,一定会调用toString方法, 我现在让他执行shift 每次都去取数组第一项

第三种 使用Object.defineProperty

// 使用数据劫持
var i = 1
Object.defineProperty(window, 'a', {
   get() {
       return i++
    } 
})

  

  

猜你喜欢

转载自www.cnblogs.com/qqfontofweb/p/12902826.html