类型判断
typeof
不能判断 Array Null Map Set… 都返回Object
instanceof
通过原型链查找判断类型 所以引用类型最终都会指向 Object
/** 实现原理
val1 是实列
val2 是类型
实列__proto__ 会指向 类型的原型prototype
[] instanceof Object === true 原型链
*/
function myInstanceof(val1, val2) {
if (!val1.__proto__) return false
return 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");
}