Object.prototype.toString.call() 和 instanceOf 和 Array.isArray() 区别以及优缺点

简介: Object.prototype.toString.call() 和 instanceOf 和 Array.isArray() 区别以及优缺点

Object.prototype.toString.call()、instanceof和Array.isArray()都是判断数据类型的方法,但在具体的使用上有一些区别和优缺点。

Object.prototype.toString.call(): Object.prototype.toString.call(obj)方法可以获取obj的类型。对于原始类型,返回结果如下:

数字类型返回 "[object Number]"

字符串类型返回 "[object String]"

布尔类型返回 "[object Boolean]"

undefined返回 "[object Undefined]"

null返回 "[object Null]"

对于引用类型,返回结果如下:

对象类型返回 "[object Object]"

数组类型返回 "[object Array]"

函数类型返回 "[object Function]"

Date类型返回 "[object Date]"

RegExp类型返回 "[object RegExp]"

...

优点:

可以准确判断各种类型,包括引用类型和原始类型。

缺点:

使用起来较为繁琐,需要通过Object.prototype.toString.call(obj)来获取类型。

示例代码:

var obj = {};
var arr = [];
 
console.log(Object.prototype.toString.call(obj)); // [object Object]
console.log(Object.prototype.toString.call(arr)); // [object Array]

instanceof: instanceof是一种运算符,判断一个对象是否是某个构造函数创建的实例。语法是 obj instanceof constructor。如果obj是constructor的实例,返回 true;否则返回 false。

优点:

使用简单,语义清晰。

缺点:

只能判断对象是否是某个构造函数的实例,不能判断具体的类型。

示例代码:

var obj = {};
var arr = [];
 
console.log(obj instanceof Object); // true
console.log(arr instanceof Array); // true

综合比较:

Object.prototype.toString.call()最为全面,可以判断各种类型,但使用起来较为繁琐。

instanceof只能判断对象是否是某个构造函数的实例,使用简单但不能判断具体类型。

Array.isArray()只能判断是否为数组类型,使用简单且语义清晰。


相关文章
|
8天前
|
存储 JavaScript 前端开发
Object和Map的区别
Object和Map的区别
|
1月前
|
JavaScript 前端开发 索引
JavaScript与Object C的区别
JavaScript与Object C的区别
12 1
|
1月前
|
安全 Java 编译器
【JAVA】泛型和Object的区别
【JAVA】泛型和Object的区别
|
1月前
|
JavaScript 前端开发
JavaScript中Object.prototype.toString.call()、instanceOf和Array.isArray()的区别
JavaScript中Object.prototype.toString.call()、instanceOf和Array.isArray()的区别
35 1
|
1月前
|
Java
Java Object 类
5月更文挑战第16天
|
29天前
|
存储 算法 Java
滚雪球学Java(42):探索对象的奥秘:解析Java中的Object类
【5月更文挑战第17天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
26 2
滚雪球学Java(42):探索对象的奥秘:解析Java中的Object类
|
7天前
|
Java
【Java】Object类简单解析
【Java】Object类简单解析
11 1
|
12天前
|
前端开发 JavaScript Java
Java基础10-深入理解Class类和Object类(二)
Java基础10-深入理解Class类和Object类(二)
18 5
|
12天前
|
Java C++
Java基础10-深入理解Class类和Object类(一)
Java基础10-深入理解Class类和Object类(一)
18 4
|
1月前
|
Java
【JAVA学习之路 | 基础篇】Object类及重写的equals()与toString()
【JAVA学习之路 | 基础篇】Object类及重写的equals()与toString()