typeof和instanceof的区别

1.typeof
用于判断数据类型,返回值有number、string、boolean、function、undefined、object 六个。

在这里我们可以看到typeof判断null、array、object以及函数的实例(new + 函数)时,它返回的都是object。这就导致在判断这些数据类型的时候得不到真实的数据类型。

  • typeof对于原始类型来说,除了null都可以显示正确类型

  • typeof对于对象来说,除了函数都会显示object

2.instanceof

instanceof是用来判断 A 是否为 B 的实例,表达式为:A instanceof B,如果 A 是 B 的实例,则返回 true,否则返回 false。 在这里需要特别注意的是:instanceof 检测的是原型。 

例如:

[] instanceof Array; //true
{} instanceof Object;//true
new Date() instanceof Date;//true
 
function Person(){};
new Person() instanceof Person;
 
[] instanceof Object; //true
new Date() instanceof Object;//true
new Person instanceof Object;//true

但是instanceof可以判断出[]是Array的实例,同时也认为是Object的实例,Why????

  instanceof 只能用来判断两个对象是否属于实例关系, 而不能判断一个对象实例具体属于哪种类型。

之后增加了Array.isArray()方法判断这个值是不是数组的。

 

总结一下:

1、typeof能够检测出了null之外的原型类型(String、Number、Boolean、Undefined),对于对象类型能判断出function、其他的都为Object

2、判断一个值是否为数组,使用Array.isArray()

3、如果需要判断一个值是否为null,最直接就是与null比较

 value === null;    //true or false

 注意这里需要三等号操作符“===”,因为三等号操作符在进行比较的时候不会将变量强制转换为另一种类型。

由此可见,无论是typeof还是instanceof都不能准确判断出正确的类型

posted @ 2023-02-09 18:49  122www  阅读(243)  评论(0编辑  收藏  举报