类型判断
typeof
不能判断 Array Null Map Set… 都返回Object
instanceof
通过原型链查找判断类型 所以引用类型最终都会指向 Object
/** 实现原理val1 是实列val2 是类型实列__proto__ 会指向 类型的原型prototype[] instanceof Object === true 原型链*/function myInstanceof(val1, val2) {if (!val1.__proto__) return falsereturn val1.__proto__ === val2.prototype ?true:myInstanceof(val1.__proto__, val2)}
Object.prototype.toString.call()
通过 toString() 来获取每个对象的类型
Object.prototype.toString.call(Function)"[object Function]"Object.prototype.toString.call()"[object Undefined]"
isArray
用于判断数组
isNaN
用于判断是否为NaN
类型转化
拆箱转换
在引用类型值中 将 引用类型值转化为 字符串或数字 将进行 拆箱操作
当转化为数字 首先调用 valueOf => toString => 都不存在 调用返回基本类型
当转化为字符串 只会调用 toString => 都不存在 调用返回基本类型
var a = {i: 1,toString() {return this.i++;}}if (a == 1 && a == 2 && a == 3) {console.log("Hello world");}
