JavaScript中对象类型检测

ECMAScirpt中有两种数据类型的值:基本数据类型和引用数据类型

  • 基本数据类型: 简单的数据段 存放在栈中 按值访问
  • 基本数据类型如下:Undefined Null Boolean Number String
  • 引用数据类型:由多个值构成的对象 存放在堆中 按地址访问
  • 引用数据类型如下:Object Array Function 等

以上内容是大家众所周知的,那该如何检测某个变量属于那种类型?以下是我知道的几种方法

1、typeof
它只能检测基本数据类型,对引用类型束手无策

图片描述

2、instanceof
概述:instanceof 运算符可以用来判断某个构造函数的prototype属性是否存在另外一个要检测对象的原型链上
语法:object instanceof constructor

图片描述
因为所有的实例都继承自Object, 所以object instanceof Object 返回皆为true

图片描述

注意:
(1)如果表达式 obj instanceof Foo 返回true,则并不意味着该表达式会永远返回ture,因为Foo.prototype属性的值有可能会改变,改变之后的值很有可能不存在于obj的原型链上,这时原表达式的值就会成为false。
(2)原表达式的值也会改变,就是改变对象obj的原型链的情况,虽然在目前的ES规范中,我们只能读取对象的原型而不能改变它,但借助于非标准的proto魔法属性,是可以实现的。比如执行obj.proto = {}之后,obj instanceof Foo就会返回false了

图片描述

图片描述

3、constructor
通过 obj.constructor 得到某个实例到对应的构造函数
在修改了构造函数(A)原型链且没有显式的修改A.prototype.constructor的情况下,结果将不是我们想要的

图片描述

4、{}.toString || Object.prototype.toString 返回一个代表该对象的字符串

用法不多说了,直接上代码

图片描述

由于个人能力有限,如果有错误希望大家帮我及时改正。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值