typeof 与 instanceof之间的区别

ES6规范中有7种数据类型,分别是基本类型和引用类型两大类

基本类型(简单类型、原始类型):String、Number、Boolean、Null、Undefined、Symbol

引用类型(复杂类型):Object(对象、Function、Array)

1、typeof返回结果是该类型的字符串形式表示,返回一个值的数据类型有以下几种结果。

原始类型 number、string、boolean
函数function
undefined
object

注意
typeof对于原始类型来说,除了null都可以显示正确类型,返回object
typeof对于对象来说,除了函数都会显示object,所以array和对象无法区分都会返回object
typeof对于Symbol类型返回的是function

2、instanceof是用来判断 A 是否为 B 的实例,表达式为:A instanceof B,如果 A 是 B 的实例,则返回 true,否则返回 false。 在这里需要特别注意的是:instanceof 检测的是原型。 对于基本数据类型会返回false,null undefined不可以使用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????因为: 数组Array是对象Object的一个子类,所以 a instanceof Object的返回值是 true。
instanceof 只能用来判断两个对象是否属于实例关系, 而不能判断一个对象实例具体属于哪种类型
之后增加了**Array.isArray()**方法判断这个值是不是数组的。

总结一下:

1、typeof能够检测出了null之外的原型类型(String、Number、Boolean、Undefined),对于对象类型能判断出function、其他的都为Object。typeof 对数组 [] 和对象 {} 的返回值都是Object,无法区分数组和对象,但是instanceof可以区分。

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

3、如果需要判断一个值是否为null,最直接就是与null比较
value === null; //true or false
注意这里需要三等号操作符“===”,因为三等号操作符在进行比较的时候不会将变量强制转换为另一种类型。

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值