面试题

2020-10-15 js面试原型

# instanceOf实现

      /**
       * @description: es5方法获取实例原型,直到找到null
       * @param {*} pro,实例相当于instanceOf 的left-handle ,classFn原型
       * @return {*} boolean
       */
      function ins(pro, classFn) {
          let proto = Object.getPrototypeOf(pro)
          while (true) {
              if (proto === null) return false
              if (proto === classFn.prototype) return true
              proto = Object.getPrototypeOf(proto)
          }
      }

# parseInt回调函数处理

    ["1", "2", "3"].map(parseInt)
    parseInt方法接受map传递的回调函数callback(item, index, array)
    相当于
        [parseInt("1", 0), parseInt("2", 1), parseInt("3", 2)]
    1 按十进制转换输出1
    1 不在2~36 之间, 输出NaN
    字符串” 3“ 里面没有合法的二进制数, 输出NaN
    所以最后结果是[1, NaN, NaN]
    转为十进制

# 数据类型转换

如何使得等式成立
let a = {}
a == 1 && a == 2 && a == 3
    object数据类型 == 比较时候, 调用valueOf或者toString方法
    let a = {
        value: '1',
        valueOf() { //toString
            return this.value++
        }
    }

    let a = [1, 2, 3]
    a.valueOf = a.shift
如何使得等式成立
let a = {}
a === 1 && a === 2 && a === 3
let value = 1
Object.defineProperty(window, 'a', {
	get() {
		return value++
	},
})
console.log(a === 1 && a === 2 && a === 3)
最后更新于: 2024年6月25日 18:06