前言:
现在我们对“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类型的数据