Object.prototype.toString.call() 和 instanceOf 和 Array.isArray() 详解

解析:

理解 Object.prototype.toString.call(), instanceof, 和 Array.isArray() 是 JavaScript 中重要的类型检查工具。以下是一个较为详细的解释和示例代码,帮助你理解它们的工作原理和使用场景

Object.prototype.toString.call():

Object.prototype.toString.call() 是一种通用的方法,它用于获取值的内部 [[Class]] 属性,然后返回一个字符串,表示值的类型。这个方法可以用于各种 JavaScript 值,包括原始值和对象。以下是详细解释和示例:

// 示例1: 使用Object.prototype.toString.call()检查值的类型const arr = [];
const obj = {};
const num = 42;
const str = "Hello";const typeOfArr = Object.prototype.toString.call(arr);
const typeOfObj = Object.prototype.toString.call(obj);
const typeOfNum = Object.prototype.toString.call(num);
const typeOfStr = Object.prototype.toString.call(str);console.log(typeOfArr); // "[object Array]"
console.log(typeOfObj); // "[object Object]"
console.log(typeOfNum); // "[object Number]"
console.log(typeOfStr); // "[object String]"

这个方法的好处是它可以在任何情况下都返回一个一致的字符串,用来描述值的类型。这使得它非常适合用于类型检查和泛型编程。

instanceof:

instanceof 是一种用于检查对象是否是特定构造函数或类的实例的方法。它通常用于检查对象的继承关系。以下是详细解释和示例:

// 示例2: 使用instanceof检查对象的构造函数class MyArray extends Array {}
const arr = new MyArray();console.log(arr instanceof MyArray); // true
console.log(arr instanceof Array); // true
console.log(arr instanceof Object); // true

instanceof 的优点是它可以用来检查对象是否是特定构造函数或类的实例,但它不适用于原始值(如数字、字符串等)。

Array.isArray():

Array.isArray() 是专门用于检查一个值是否是数组的方法。它返回一个布尔值,指示被检查的值是否是数组。以下是详细解释和示例:

// 示例3: 使用Array.isArray()检查值是否是数组const arr = [];
const obj = {};
const num = 42;console.log(Array.isArray(arr)); // true
console.log(Array.isArray(obj)); // false
console.log(Array.isArray(num)); // false

这个方法特别适合用于确定一个值是否是数组。

总结:

Object.prototype.toString.call() 是通用的,用于确定值的类型。
instanceof 用于检查对象是否是特定构造函数或类的实例。
Array.isArray() 用于检查一个值是否是数组。
根据你的具体需求,选择适当的方法来执行类型检查。这三种方法一起构成了 JavaScript 中强大的类型检查工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/117228.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

rust - 理解borrow trait

简介 borrow trait 是处理借用(即其它语言中的引用)的 trait,变量的所有权不会转移.泛型定义如下: pub trait Borrow<Borrowed: ?Sized> {/// Immutably borrows from an owned value.fn borrow(&self) -> &Borrowed; }其中包含一个 borrow(&self)的方…

动手学深度学习—含并行连结的网络GoogLeNet(代码详解)

目录 1. Inception块3. GoogLeNet模型3. 训练模型 GoogLeNet吸收了NiN中串联网络的思想&#xff0c;并在此基础上做了改进&#xff0c;并且在2014年的ImageNet图像识别挑战赛中获得了不错的效果。 1. Inception块 GoogLeNet论文解决了多大的卷积核最合适的问题。 Inception块…

PHP 在线考试管理系统mysql数据库web结构layUI布局apache计算机软件工程网页wamp

一、源码特点 PHP 在线考试管理系统是一套完善的web设计系统 layUI技术布局 &#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 PHP 在线考试系统1 代码 https://download.csdn.net/download/qq_41…

【C++面向对象】5. this指针

文章目录 【 1. 基本原理 】【 2. 实例 】 【 1. 基本原理 】 在 C 中&#xff0c;只有成员函数才有 this 指针&#xff08;友元函数没有 this 指针&#xff0c;因为友元不是类的成员&#xff09;&#xff0c;this 指针是所有成员函数的隐含参数。 在成员函数内部&#xff0c;…

线性表操作的实现--顺序表

本文参考朱战力老师的数据结构与算法--使用C语言一书 文章目录 前言 一、线性表是什么&#xff1f; 二、具体实现 1.顺序表的定义 2.初始化ListInitiate&#xff08;L&#xff09; 3.求当前元素个数ListLength&#xff08;L&#xff09; 4.插入元素ListInsert&#xff08;L&…

[卷积神经网络]FasterNet论文解析

一、概述 FasterNet是CVPR2023的文章&#xff0c;通过使用全新的部分卷积PConv&#xff0c;更高效的提取空间信息&#xff0c;同时削减冗余计算和内存访问&#xff0c;效果非常明显。相较于DWConv&#xff0c;PConv的速度更快且精度也非常高&#xff0c;识别精度基本等同于大型…

iOS 配置通用链接(Universal Link)服务端和开发者后台都配置好了,还是跳转不到App

目录 一、什么是 Universal Link&#xff1f; 1.背景介绍 2.特点 3.运行机制原理&流程图 二、配置教程 1.第一步&#xff1a;开启 Associated Domains 服务 1.1 开通 Associated Domains 2.第二步&#xff1a;服务器配置 apple-app-site-association&#xff08;AAS…

【makedown使用介绍】

如何使用makedown 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必…

pd19虚拟机软件 Parallels Desktop 19 mac中文停用功能

Parallels Desktop 19 mac是一款功能强大的虚拟机软件&#xff0c;它允许用户在Mac电脑上同时运行Windows、Linux和其他操作系统。Parallels Desktop提供了直观易用的界面&#xff0c;使用户可以轻松创建、配置和管理虚拟机。 Parallels Desktop 19 for Mac停用功能 从Paralle…

深圳世有伯乐教育科技有限公司——LJ培训

今天来吐槽一波 深圳世有伯乐教育科技有限公司就是一个垃圾的培训机构&#xff0c;不&#xff0c;说是培训机构都是扭曲事实了&#xff0c;因为它根本就没有国家认可的办学许可证。光说没法让人信服&#xff0c;以下是企查查的截图&#xff1a; 世有伯乐的工商信息图片 续上&…

交换机基础(四):MSTP负载均衡配置案例

如图所示是某个企业内部核心网络的结构图&#xff0c;目前企业中有20个VLAN, 编号为VLAN1&#xff5e;VLAN20, 为了确保内部网络的可靠性&#xff0c;使用 了冗余链路和MSTP 协议。为了能更好地利用网络资源和带宽&#xff0c;现管理员希望通过配置MSTP 的负载均衡实现网络带宽…

TX Text Control.NET For WPF 32.0 Crack

TX Text Control 支持VISUAL STUDIO 2022、.NET 5 和 .NET 6 支持 .NET WPF 应用程序的文档处理 将文档编辑、创建和 PDF 生成添加到您的 WPF 应用程序中。 视窗用户界面 功能齐全的文档编辑器 TX Text Control 是一款完全可编程的丰富编辑控件&#xff0c;它在专为 Visual Stu…

软考高级系统架构 上午真题错题总结

目录 前言一、2022年真题&#xff08;√&#xff09;二、2021年真题三、2020年真题&#xff08;√&#xff09;四、2019年真题&#xff08;√&#xff09;五、2018年真题&#xff08;√&#xff09;六、2017年真题&#xff08;√&#xff09;七、2016年真题&#xff08;√&…

【Linux】IP协议

文章目录 &#x1f4d6; 前言1. 网络层2. IP协议格式3. IP报文分片和组装3.1 如何分片和组装&#xff1a;3.2 组装的衍生问题&#xff1a; 4. 网段划分&#xff08;重点&#xff09;4.1 子网掩码&#xff1a;4.2 IP地址的数量限制&#xff1a;4.3 私有IP地址和公网IP地址&#…

JVM——堆内存调优(Jprofiler使用)Jprofile下载和安装很容易,故没有记录,如有需要,在评论区留言)

堆内存调优 当遇到OOM时&#xff0c;可以进行调参 1、尝试扩大堆内存看结果 2、分析内存&#xff0c;看哪个地方出现了问题&#xff08;专业工具&#xff09; 调整初始分配内存为1024M&#xff0c;调整最大分配内存为1024M&#xff0c;打印GC细节&#xff08;如何添加JVM操…

本地FTP YUM源报错处理

一、问题描述 某次OS升级到Anolis 8.6后&#xff0c;但是还需要centos 6.5的yum源&#xff0c;恢复回去后&#xff0c;yum更新&#xff0c;报如下错误&#xff1a; Errors during downloading metadata for repository ‘base’: Curl error (8): Weird server reply for ftp…

python sqlalchemy(ORM)- 02 表关系

文章目录 表关系ORM表示 1v1ORM表示 1vm 表关系 1:1&#xff0c;表A 中的一条记录&#xff0c;仅对应表B中的一条记录&#xff1b;表B的一条记录&#xff0c;仅对应表A的一条记录。1:m&#xff0c;表A中的一条记录&#xff0c;对应表B中的多条记录&#xff0c;表B中的一条记录…

AJAX: 对话框大全

AJAX:$.ajax({url: "/admin/cutting/getDataWeek",type: "GET",data:{},dataType:json,success: function (res) {if (res.code 1) {}},error:function (error) {console.log(请求失败);console.log(error);}}); $(.sub).unbind(click).click(funct…

【转】多台服务器共享session问题

多台服务器共享 session 问题 现在的大型网站中&#xff0c;如何实现多台服务器中的 session 数据共享呢&#xff1f; 当使用多台服务器架设成集群之后&#xff0c;我们通过负载均衡的方式&#xff0c;同一个用户&#xff08;或者 ip&#xff09;访问时被分配到不同的服务器上…

css之Flex弹性布局(子项常见属性)

文章目录 &#x1f380;前言&#xff1a;本篇博客介绍弹性布局flex容器中子项的常见用法&#x1fa80;flex:子项目占得份数 &#xff08;划分不同子项的比例&#xff09;&#x1f387;align-self 控制单独一个子项在侧轴的排列方式&#x1f9f8;order属性定义子项的排列顺序 &a…