首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JavaScript代码中如何让typeof一个对象更靠谱,我通常这么处理

首先,我们知道在ECMAScript中有5种基本数据类型(undefined,Null,Boolean,Number和String)。还有一种复杂的数据类型(Object)。鉴于ECMAScript是松散类型,因此需要有一种手段来检测给定变量的数据类型,然而,typeof就是负责提供这方面信息的操作符。

对一个值使用typeof操作符可能返回下列某个字符串:

"undefined" - 如果这个值未定义

"boolean" - 如果这个值布尔值

"string" - 如果这个值是字符串

"number" - 如果这个值是数值

"object" -如果这个值是对象或null

"function" -如果这个值是函数

知道了上面这些知识点之后,下面,进入今天要讲的重点内容。

在工作中,我们时常需要去检测一个值是否是一个对象,通过上面分析,如果直接使用typeof会存在一些缺陷。然而,如何才能让这个判断代码输出结果符合我的意愿呢?需要考虑三个点。

从最基本的这个判断函数开始:

第一个点,Null类型需要排除

null值表示的是一个空对象指针,也就是说:

console.log(isObject(null))

输出:true

这不是我们需要的,所以我们将代码改成下面这样子:

这样的话,就将str为null判断成object的情况过滤掉了。

第二个点,function需要考虑成object

函数通过typeo返回的是一个字符串function。如下所示:

大多数情况下,可能这是我们期望的情况,但有时候我们希望将函数考虑成输出ture的情况。我们的代码可以这么改:

最加了一个typeof(str)全等于function。

第三个点,Array不需要考虑成object

数组通过typeof返回的是一个字符串object。如下所示:

因为数组确实也是一个对象呀,同样在大多数情况下,这也是我们期望的情况 ,但是,有时候我需要将数组考虑输出false的情况,可以往isObject函数里再加一行代码:

为什么要分上面这三点来讲一下了?这样一来,我们可以根据自己的实际情况来考虑需要过虑哪种类型,自由组合代码。

如果同时需要对空值,数组,函数返回false,只让对象返回true,下面这么搞,会更简单。

没错,利用contructor指向来判断。

总结一下:

对于一些这样的判断,在应用层面,也可以使用一些现有库封装好的函数,或者新标准提供的函数。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180513A1G7QB00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券