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


目录
打赏
0
0
0
0
15
分享
相关文章
通过array.some()实现权限检查、表单验证、库存管理、内容审查和数据处理;js数组元素检查的方法,some()的使用详解,array.some与array.every的区别(附实际应用代码)
array.some()可以用来权限检查、表单验证、库存管理、内容审查和数据处理等数据校验工作,核心在于利用其短路机制,速度更快,节约性能。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
通过array.every()实现数据验证、权限检查和一致性检查;js数组元素检查的方法,every()的使用详解,array.some与array.every的区别(附实际应用代码)
array.every()可以用来数据验证、权限检查、一致性检查等数据校验工作,核心在于利用其短路机制,速度更快,节约性能。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
js中new和object.creat区别
【10月更文挑战第29天】`new` 关键字和 `Object.create()` 方法在创建对象的方式、原型链继承、属性初始化以及适用场景等方面都存在差异。在实际开发中,需要根据具体的需求和设计模式来选择合适的方法来创建对象。
【前端学java】java中的Object类和前端中的Object有什么区别(9)
【8月更文挑战第10天】java中的Object类和前端中的Object有什么区别
85 0
【前端学java】java中的Object类和前端中的Object有什么区别(9)
Object.freeze() 和 const 的区别详解
【8月更文挑战第31天】
68 0
【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.
|
10月前
|
JS【详解】Set 集合 (含 Set 集合和 Array 数组的区别,Set 的 API,Set 与 Array 的性能对比,Set 的应用场景)
JS【详解】Set 集合 (含 Set 集合和 Array 数组的区别,Set 的 API,Set 与 Array 的性能对比,Set 的应用场景)
218 0
|
10月前
|
JS【详解】Map (含Map 和 Object 的区别,Map 的常用 API,Map与Object 的性能对比,Map 的应用场景和不适合的使用场景)
JS【详解】Map (含Map 和 Object 的区别,Map 的常用 API,Map与Object 的性能对比,Map 的应用场景和不适合的使用场景)
277 0
JavaScript与Object C的区别
JavaScript与Object C的区别
58 1

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等