龙空技术网

JavaScript检测数据类型

程序员追梦的心 125

前言:

现在我们对“js typeof返回的数据类型”大致比较关切,咱们都想要分析一些“js typeof返回的数据类型”的相关内容。那么小编同时在网上收集了一些对于“js typeof返回的数据类型””的相关内容,希望大家能喜欢,你们快快来学习一下吧!

JavaScript中有哪些数据类型?

js中数据类型分为基本数据类型(5种)复杂数据类型(1种)

基本数据类型(原始类型):number、string、boolean(true/false)、undefined、null

复杂类型(引用类型)object

js数据类型的方法:typeof 和 instanceof

1.typeof 检测数据类型,思考一下为啥typeof null 返回的是object呢?

代码如下:

   <script>        // 1.typeof检测数据类型        console.log(typeof(12));//number        console.log(typeof('12'));//string        console.log(typeof(true));//true        console.log(typeof(false));//false        console.log(typeof(undefined));//undefined        console.log(typeof(null));//object   思考:为啥是object?        console.log(typeof([]));//object        console.log(typeof(new Date()));//object        console.log(typeof({}));//object        console.log(typeof(function(){}));//function 思考:为啥会多出一function 出来?        console.log(typeof Array);//function    </script>

截图如下:

疑惑:typeof返回的是object,而不是一个null?

这里小伙伴们肯定会想,为啥typeof返回的是object,而不是一个null ?那是因为呀 typeof去检测的时候,返回的数据类型是根据机器码的后三位,当机器码后三位是000的时候会返回object,而js里面的 null 机器码存储是00...000全部都是0,,机器码后三位刚好是000 ,所以就返回来了 object。这个是js语言本身的一个bug,在这么多年的发展过程中也有开发者像ECMA组织提过这个bug(你这个typeof null 返回的数据类型为object,和本身object有冲突),但是很遗憾被驳回了,所以一直遗留至今。

疑惑: typeof(function(){}) 和 typeof Array 为啥返回的是function,为啥多出来一个function?因为function并不算是js的数据类型。

我们都知道,typeof去检测引用数据类型的时候,本身是应该返回object,但是他会把他分成两种类型,第一种就是直接是object,第二种是返回的一个function,小伙伴们又会想,这是为什么呢?

这是因为在js的内部(js语言设计过程中),在引用类型上面内部定义定义了一个方法,叫做 【[call]】,在检测引用数据类型的时候,会先去看看这个引用类型上面有没有 call 方法,如果有就会 返回 function,如果没有返回object 。这个的话其实在ECMAScript(ECMAScript网址:)里面有说道,如下:

通过官网我们可以看到,当typeof 检测引用数据类型的时候,对象上有 call方法时,返回的是 function,没有的话就是返回object。

总结:typeof 检测数据类型是不大准确的,因为typeof 检测的数据类型少了一个null,多出来一个function.

标签: #js typeof返回的数据类型 #判断js类型的数据