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


相关文章
|
3天前
|
设计模式 JavaScript 前端开发
js中new和object.creat区别
【10月更文挑战第29天】`new` 关键字和 `Object.create()` 方法在创建对象的方式、原型链继承、属性初始化以及适用场景等方面都存在差异。在实际开发中,需要根据具体的需求和设计模式来选择合适的方法来创建对象。
|
3月前
|
前端开发 Java 编译器
【前端学java】java中的Object类和前端中的Object有什么区别(9)
【8月更文挑战第10天】java中的Object类和前端中的Object有什么区别
40 0
【前端学java】java中的Object类和前端中的Object有什么区别(9)
|
3月前
|
JavaScript 前端开发
Object.freeze() 和 const 的区别详解
【8月更文挑战第31天】
31 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 的应用场景)
63 0
|
4月前
|
JSON JavaScript API
JS【详解】Map (含Map 和 Object 的区别,Map 的常用 API,Map与Object 的性能对比,Map 的应用场景和不适合的使用场景)
JS【详解】Map (含Map 和 Object 的区别,Map 的常用 API,Map与Object 的性能对比,Map 的应用场景和不适合的使用场景)
87 0
|
6月前
|
JavaScript 前端开发 索引
JavaScript与Object C的区别
JavaScript与Object C的区别
35 1
|
5月前
|
存储 JavaScript 前端开发
Object和Map的区别
Object和Map的区别
|
1天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
19 4
|
1月前
|
Java
Java Object 类详解
在 Java 中,`Object` 类是所有类的根类,每个 Java 类都直接或间接继承自 `Object`。作为所有类的超类,`Object` 定义了若干基本方法,如 `equals`、`hashCode`、`toString` 等,这些方法在所有对象中均可使用。通过重写这些方法,可以实现基于内容的比较、生成有意义的字符串表示以及确保哈希码的一致性。此外,`Object` 还提供了 `clone`、`getClass`、`notify`、`notifyAll` 和 `wait` 等方法,支持对象克隆、反射机制及线程同步。理解和重写这些方法有助于提升 Java 代码的可读性和可维护性。