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

点击上方蓝字关注“小郑搞码事”,每天都能学到知识,搞懂一个问题!

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

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

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

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

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

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

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

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

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

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

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

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

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

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

console.log(isObject(null))

输出:true

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

总结一下:

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


分享到:


相關文章: