【JavaScript基础】判断数据类型,判断是数组还是对象?

一、判断数据的类型,了解一些常用的方法(结尾为总结判断数组和对象的推荐方法)

1.typeof运算符

typeof属于运算符不是函数,所以可以不用加括号 typeof()

只能区分基本类型,即 “Number”,”String”,”undefined”,”Boolean”,”Object”,“Function”,“symbol” (ES6 新增)七种

NaN返回"number",null返回"object"。对于数组、null、对象来说,使用 typeof 都会统一返回 “object”

 

控制台打印实验

很明显Array和Object 会返回 "object",所以你无法使用typeof判断数组还是对象。

 

typeof 的返回值以下截图自MDN官网

 

 2.instanceof运算符

用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上, 

严格来说是 Java 中的一个双目运算符,用来测试一个对象是否为一个类的实例

当你希望判断是否为对象时,instanceof 是无法判断的。如果你希望判断是否为数组时,instanceof可以判断

 

 

 

3.Object.prototype.constructor

返回创建实例对象的 Object 构造函数的引用,可以进行判断对象或者数组

 

4.Object.prototype.toString.call()

万能,可以判断任何类型。Object.prototype.toString.call() 常用于判断浏览器内置对象。

 

 

5.Array.isArray(),有兼容问题,当然现在已经不是基本不存在了(IE 22年6月15日停止更新)

从字面定义来看,只有传入参数为数组时会返回true,其余所有情况返回为false

 

二、判断数据类型的推荐方法 

  • 判断数据类型的方法:Object.prototype.toString.call()

万能的方法必须记住,可以判断任何类型。

 

三、判断数组 或者  对象的 推荐方法

  • 判断数组的方法:Array.isArray()

其余方法均有限制(instanceof受限于同一框架(同一执行环境),constructor存在手动修改的可能性),考虑兼容性用万能方法Object.prototype.toString.call()代替

  • 判断对象的方法:Object.prototype.toString.call()

万能的方法必须记住,可以判断任何类型(数组也可以)。

posted @ 2022-03-02 17:33  wanglei1900  阅读(326)  评论(0编辑  收藏  举报