类型判断

typeof

不能判断 Array Null Map Set… 都返回Object

instanceof

通过原型链查找判断类型 所以引用类型最终都会指向 Object

  1. /** 实现原理
  2. val1 是实列
  3. val2 是类型
  4. 实列__proto__ 会指向 类型的原型prototype
  5. [] instanceof Object === true 原型链
  6. */
  7. function myInstanceof(val1, val2) {
  8. if (!val1.__proto__) return false
  9. return val1.__proto__ === val2.prototype ?
  10. true
  11. :
  12. myInstanceof(val1.__proto__, val2)
  13. }

Object.prototype.toString.call()

通过 toString() 来获取每个对象的类型

  1. Object.prototype.toString.call(Function)
  2. "[object Function]"
  3. Object.prototype.toString.call()
  4. "[object Undefined]"

isArray

用于判断数组

isNaN

用于判断是否为NaN

类型转化

每个数据类型都有toStringvalueOf方法

拆箱转换

在引用类型值中 将 引用类型值转化为 字符串或数字 将进行 拆箱操作
当转化为数字 首先调用 valueOf => toString => 都不存在 调用返回基本类型
当转化为字符串 只会调用 toString => 都不存在 调用返回基本类型

  1. var a = {
  2. i: 1,
  3. toString() {
  4. return this.i++;
  5. }
  6. }
  7. if (a == 1 && a == 2 && a == 3) {
  8. console.log("Hello world");
  9. }