JS如何正确判断数据类型

如何正确判断JS的数据类型

说道判断数据类型,大多数人可能会想到typeofinstanceof

那么typeofinstanceof真的能够准确的判断数据类型吗?他们有那些局限呢

一.typeof

var a = typeof 1;  --------> number 
var a1 = typeof '1';  --------> string
var a2 = typeof false;  --------> boolean 
var a3 = typeof null;  --------> object 
var a4 = typeof undefined;  --------> undefined 
var a5 = typeof [];  --------> object 
var a6 = typeof {};  --------> object 
var a7 = typeof Symbol();  --------> symbol 
var a8 = typeof function(){};  --------> function 
var a9 = typeof NaN;   -------> number 

console.log(a,a1,a2,a3,a4,a5,a6,a7,a8,a9)

根据结果可以看到typeof在判断null,[],{}判断出来都是object

​ 其中typeof nullobject为什么会出现这种情况呢?因为在 JS的最初版本中,使用的是 32 位系统,为了性能考虑使用低位存储了变量的类型信息,000 开头代表是对象,然而 null 表示为全零,所以将它错误的判断为 object 。虽然现在的内部类型判断代码已经改变了,但是对于这个 Bug 却是一直流传下来。

二.instanceof

function Animal(){    }
var dog = new Animal()
var a = 1 instanceof Number -------> false
var a1 = {} instanceof Object -------> true
var a2 = [] instanceof Array -------> true
var a3 = function(){} instanceof Function -------> true
var a4 = dog instanceof Animal -------> true
console.log(a,a1,a2,a3,a4)

根据结果可以看到instanceof可以判断复杂数据类型,无法判断基本数据类型,而且数组和对象判断出来都是Object

instanceof是通过原型链来判断的,如果想要手写实现instanceof,可以看我的另外一篇文章:手动实现instanceof

三.Object.prototype.toString.call()

var a = Object.prototype.toString.call({}); --------------> [object Object] 
var a1 = Object.prototype.toString.call([]); ------------->[object Array] 
var a2 = Object.prototype.toString.call(1); --------------> [object Number] 
var a3 = Object.prototype.toString.call(false); --------------> [object Boolean] 
var a4 = Object.prototype.toString.call(undefined); --------------> [object Undefined] 
var a5 = Object.prototype.toString.call(null); --------------> [object Null] 
var a6 = Object.prototype.toString.call('判断类型'); --------------> [object String] 
var a7 = Object.prototype.toString.call(function(){}); --------------> [object Function] 
var a8 = Object.prototype.toString.call(Symbol()); --------------> [object Symbol]
var a9 = Object.prototype.toString.call(NaN); --------------> [object Number]
console.log(a,a1,a2,a3,a4,a5,a6,a7,a8,a9)

​ 控制台打印结果:在这里插入图片描述

​ 返回的结果是一个字符串,object后面代表的是判断的数据类型

根据结果可以看到Object.prototype.toString.call()可以准确的判断数据的类型,不管是基本数据类型还是引用数据类型

​ 推荐使用Object.prototype.toString.call()来判断

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 在JavaScript中,可以使用typeof运算符来判断数据类型。typeof通常用于判断基本数据类型,返回表示数据类型的字符串。例如,typeof 1会返回"number",typeof 'a'会返回"string",typeof true会返回"boolean",typeof undefined会返回"undefined",typeof null会返回"object",typeof {}会返回"object",typeof [1,2,3会返回"object",typeof new Fn()会返回"object",typeof new Array()会返回"object"。然而,typeof不能准确判断null的数据类型,null会被判断为"object"。此外,jQuery也提供了一系列工具方法来判断数据类型,例如jQuery.isArray()用于判断是否为数组,jQuery.isEmptyObject()用于判断是否为空对象,jQuery.isFunction()用于判断是否为函数等等。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [JS判断数据类型的5种方法](https://blog.csdn.net/weixin_45571121/article/details/120518849)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [js判断数据类型(全)](https://blog.csdn.net/qq_30136729/article/details/124090314)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值