typeof和instanceof
程序员文章站
2022-06-04 23:24:07
...
JS数据类型
5种基本(值)数据类型:Number、String、boolean、null、undefined
3种引用(对象)类型:Object,Function,Array
typeof
typeof 是判断参数是什么类型的实例,返回值为说明运算数类型的字符串。
类型 | 结果 |
Number | 'Number' |
String | 'String' |
boolean | 'boolean' |
null | 'object' |
undefined | 'undefined' |
Object | 'object' |
Function | 'function' |
Array | 'object' |
若参数为引用类型,始终返回“object”,而对于Array、null始终返回“object”,所以用typeof来判断参数类型有很大的局限性。
instanceof
instanceof 运算符用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性。
语法:
object instanceof constructor
要求前面是个对象,后面是一个构造函数。而且返回的是布尔型的,不是true就是false。
a instanceof b:判断a是否为b的实例,可以用于继承关系中
b是c的父对象,a是c的实例,a instanceof b 与 a instanceof c 结果均为true
对于所有的引用类型,均为Object的实例
我们来看下instanceof如何处理null和数组
var a=null;
console.log(a instanceof Object);//false
var a=[1,2,3];
console.log(a instanceof Object);//true
var a=[1,2,3];
console.log(a instanceof Array);//true
用instanceof 方法可以明显的把null类型排除掉,同时对于对象类型他们本身就都是对象所以当匹配Object的时候返回的自然是true。
那怎样区别array和object呢?
console.log(obj instanceof Object&& (toString.call(obj) !== “[object Array]”));
利用toString方法判断是否为数组