说一下前端面试常问的 ‘JavaScript’ 判断数据类型的 方式 及 各种方式 的优缺点。
常用的类型检查:4 种
1:typeof : {
typeof 是一个操作符,不是一个函数,所以后面的括号没有特定意义,返回的结果有:number、boolan、string、Object、undefined、function 等6种数据类型。
}
优点:对基本类型的判断较为准确。
缺点:无法精准判断引用数据类型。null 和 Array 判断为 ‘ Object ’。
———————————————————————————————————————————
2:instanceof :{
instanceof 判断一个对象和函数在原型链上是否有关系,有返回 true 否则为 false
}
优点:对引用类型的判断较为准确。
缺点:无法对基本类型做出精确地判断,限定了我们的数据类型必须是 new 出来的。这样才能精确的判断。
———————————————————————————————————————————
3:constructor :{
每个函数的定义,都会生成一个 constructor ,基本类型会执行隐时的执行装箱操作,创造一个构造函数的实例。
}
优点:对基本类型和引入类型都可以判断。
缺点:无法判断 null 和 undefined ,而且 constructor 是可以修改的,会导致检查结果不准确。
———————————————————————————————————————————
4:Object.prototype.toString.call () {
无论什么类型都可以判断,返回类型的格式为 [ Object xxx ] 。
}
缺点:Object.prototype.toString 本身也可能被修改,对于数组的判断,可以通过 instanceof 和Object.prototype.toString.call()来判断。