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()只能判断是否为数组类型,使用简单且语义清晰。


相关文章
|
13天前
|
设计模式 JavaScript 前端开发
js中new和object.creat区别
【10月更文挑战第29天】`new` 关键字和 `Object.create()` 方法在创建对象的方式、原型链继承、属性初始化以及适用场景等方面都存在差异。在实际开发中,需要根据具体的需求和设计模式来选择合适的方法来创建对象。
|
3月前
|
前端开发 Java 编译器
【前端学java】java中的Object类和前端中的Object有什么区别(9)
【8月更文挑战第10天】java中的Object类和前端中的Object有什么区别
43 0
【前端学java】java中的Object类和前端中的Object有什么区别(9)
|
3月前
|
JavaScript 前端开发
Object.freeze() 和 const 的区别详解
【8月更文挑战第31天】
32 0
|
3月前
|
XML 缓存 API
【Azure API 管理】使用APIM进行XML内容读取时遇见的诡异错误 Expression evaluation failed. Object reference not set to an instance of an object.
【Azure API 管理】使用APIM进行XML内容读取时遇见的诡异错误 Expression evaluation failed. Object reference not set to an instance of an object.
|
4月前
|
JavaScript API 索引
JS【详解】Set 集合 (含 Set 集合和 Array 数组的区别,Set 的 API,Set 与 Array 的性能对比,Set 的应用场景)
JS【详解】Set 集合 (含 Set 集合和 Array 数组的区别,Set 的 API,Set 与 Array 的性能对比,Set 的应用场景)
65 0
|
4月前
|
JSON JavaScript API
JS【详解】Map (含Map 和 Object 的区别,Map 的常用 API,Map与Object 的性能对比,Map 的应用场景和不适合的使用场景)
JS【详解】Map (含Map 和 Object 的区别,Map 的常用 API,Map与Object 的性能对比,Map 的应用场景和不适合的使用场景)
96 0
|
6月前
|
JavaScript 前端开发 索引
JavaScript与Object C的区别
JavaScript与Object C的区别
35 1
|
5月前
|
存储 JavaScript 前端开发
Object和Map的区别
Object和Map的区别
|
6月前
|
Python
使用array()函数创建数组
使用array()函数创建数组。
131 3
|
30天前
|
人工智能 前端开发 JavaScript
拿下奇怪的前端报错(一):报错信息是一个看不懂的数字数组Buffer(475) [Uint8Array],让AI大模型帮忙解析
本文介绍了前端开发中遇到的奇怪报错问题,特别是当错误信息不明确时的处理方法。作者分享了自己通过还原代码、试错等方式解决问题的经验,并以一个Vue3+TypeScript项目的构建失败为例,详细解析了如何从错误信息中定位问题,最终通过解读错误信息中的ASCII码找到了具体的错误文件。文章强调了基础知识的重要性,并鼓励读者遇到类似问题时不要慌张,耐心分析。