使用js编写一个函数判断所有数据类型的通用方法
一、typeof
在 JavaScript 里使用 typeof 来判断数据类型,只能区分基本类型,即 “number”,”string”,”undefined”,”boolean”,”object” 五种。
对于数组、对象来说,其关系错综复杂,使用 typeof 都会统一返回 “object” 字符串。
typeof {} //objecttypeof [] //object
要想区别对象、数组单纯使用 typeof 是不行的。或者你会想到 instanceof 方法。
二、instanceof
instanceof是javaScript中的一种运算符,用于判断某个对象是否属于某个类(或其父类)的实例,
console.log({} instanceof Object) //trueconsole.log([] instanceof Object) //trueconsole.log(function () {} instanceof Object) //true
上面代码发现都是 Object 的实例
所以要判断复合数据类型,要如下判断:
//对象
({} instanceof Object) && !({} instanceof Function) && !({} instanceof Function)//数组
([] instanceof Object) && ([] instanceof Array)//函数
(function () {} instanceof Object) && (function () {} instanceof Function)
虽然 instanceof 运算符在某些情况下可以很方便地判断对象所属的类,但是在实际开发中需要注意其局限性,并结合其他方法和技巧来进行类型判断。
三、Object.prototype.toString.call()
更简便的方式,即是使用 Object.prototype.toString.call() 来确定类型。
由于 JavaScript 中一切都是对象,任何都不例外,对所有值类型应用 Object.prototype.toString.call() 方法
对于 Object.prototype.toString() 方法,会返回一个形如 “[object XXX]” 的字符串。
如果对象的 toString() 方法未被重写,就会返回如上面形式的字符串。
toString()为Object的原型方法,而Array,function等类型作为Object的实例,都重写了toString方法。不同的对象类型调用toString方法时,根据原型链的知识,调用的是对应的重写之后的toString方法。
Call是一个允许您更改另一个函数上下文的函数。
对于 Object.prototype.toString.call(arg),若参数为 null 或 undefined,直接返回结果。
若参数不为 null 或 undefined,则将参数转为对象,再作判断。
//编写一个函数判断所有数据类型
function _typeof(item) {let res = Object.prototype.toString.call(item);res = res.split(" ")[1];res = res.substr(0, res.length - 1);return res;
}
效果如下:
console.log(_typeof(123));//Numberconsole.log(_typeof("abc"));//Stringconsole.log(_typeof(true));//Booleanconsole.log(_typeof(null));//Nullconsole.log(_typeof(undefined));//Undefinedvar fun = function () {}
console.log(_typeof(fun));//Functionvar arr = [1, 2, 3]
console.log(_typeof(arr));//Arrayvar obj = {name: 'jack',age: 20
}
console.log(_typeof(obj));//Object
相关文章:
使用js编写一个函数判断所有数据类型的通用方法
一、typeof 在 JavaScript 里使用 typeof 来判断数据类型,只能区分基本类型,即 “number”,”string”,”undefined”,”boolean”,”object” 五种。 对于数组、对象来说,其关系错综复杂&…...
AutoSAR(基础入门篇)2.1Autosar架构中的AppL
目录 一、Autosar中APPL概述 1、AppL的内容 2、汽车顶灯示例 3、SWC的通信...
怎么使用jupter notebook并配置环境变量
有的时候需要使用Jupyter Notebook运行代码,Jupyter Notebook的主要特点: ① 编程时具有语法高亮、缩进、tab补全的功能。 ② 可直接通过浏览器运行代码,同时在代码块下方展示运行结果。 ③ 以富媒体格式展示计算结果。富媒体格式包括&…...
深信服技术认证“SCSA-S”划重点:文件上传与解析漏洞
为帮助大家更加系统化地学习网络安全知识,以及更高效地通过深信服安全服务认证工程师考核,深信服特别推出“SCSA-S认证备考秘笈”共十期内容,“考试重点”内容框架,帮助大家快速get重点知识~ 划重点来啦 *点击图片放大展示 深信服…...
Sql 动态行转列
SELECT ID, Name, [Month],auth FROM dbo.Test3 数据列表: 1.静态行专列 Select auth, MAX( CASE WHEN [Month] 一月 then Name else null end) 一月, MAX( CASE WHEN [Month] 二月 then Name else null end) 二月, MAX( CASE WHEN…...
记录 App webview加载h5页面有上传图片,应用商店审核必须加授权提示问题的解决方案
场景: 1、项目内加载了h5页面的七鱼客服,(相当于webview 加载help.html) 2、应用上架要求必须有授权提示弹窗 解决思路 1、客服的h5 页面在跳转时候,给父层webview 发消息,注入一段拦截代码,监听到有上传操作时候&…...
Stable Diffusion模型原理
1 Stable Diffusion概述 1.1 图像生成的发展 在Stable Diffusion诞生之前,计算机视觉和机器学习方面最重要的突破是 GAN(Generative Adversarial Networks 生成对抗网络)。GAN让超越训练数据已有内容成为可能,从而打开了一个全新…...
【Android 13】使用Android Studio调试系统应用之Settings移植(二):构建settings app项目目录
文章目录 一、篇头二、系列文章2.1 Android 13 系列文章2.2 Android 9 系列文章2.3 Android 11 系列文章三、准备工作3.1 创建目录3.2 初始化 git 仓库四、提取settings原始代码4.1 提取目标4.2 源码路径4.2.1 settings app4.2.2 SettingsLib4.3 存放位置...
w16php系列之基础数组
一、索引数组 概念 索引数组 是指键名为整数的数组。默认情况下,索引数组的键名是从0开始,并依次递增。它主要适用于利用位置(0、1、2……)来标识数组元素的情况。另外,索引数组的键名也可以自己指定 示例代码 <…...
【C语言】指针详解(四)
目录 1.assert断言 2.指针的使用和传址调用 2.1strlen的模拟使用 2.2传值调用和传址调用 1.assert断言 assert.h头文件定义了宏 assert(),用于在运行时确保程序符合指定条件,如果不符合,就报错终止运行。这个宏常常被称为“断言”。 例如…...
算法leetcode|94. 二叉树的中序遍历(多语言实现)
文章目录 94. 二叉树的中序遍历:样例 1:样例 2:样例 3:提示: 分析:题解:rust:go:c:python:java: 94. 二叉树的中序遍历: …...
3.[BUUCTF HCTF 2018]WarmUp1
1.看题目提示分析题目内容 盲猜一波~ : 是关于PHP代码审计的 2.打开链接,分析题目 给你提示了我们访问source.php来看一下 大boss出现,开始详细手撕~ 3.手撕PHP代码(代码审计) 本人是小白,所以第一步&…...
rocky linux9 安装go 即接下去
首先,更新系统的软件包索引以获取最新的软件包信息: sudo dnf update使用以下命令安装 Go 语言: sudo dnf install golang安装完成后,你可以通过以下命令验证 Go 语言是否安装成功: go version4、用相对路径初始化g…...
NLP中的嵌入层
在自然语言处理(NLP)中,嵌入层(Embedding Layer)是一个特殊的层,通常用于深度学习模型的第一层,它的作用是将离散的文本数据(如单词或短语)转换为连续的向量表示。每个单…...
MongoDB文档操作
3.3 文档操作 3.1 文档介绍 文档的数据结构和 JSON 基本一样。 所有存储在集合中的数据都是 BSON 格式。 BSON 是一种类似 JSON 的二进制形式的存储格式,是 Binary JSON 的简称。 文档是一组键值(key-value)对(即 BSON),一个简单的文档例子如下&…...
解决谷歌浏览器下CSS设置字体小于12px无效办法,关于如何在chrome里实现小于12px的文字。
关于如何在chrome里实现小于12px的文字。 当然文字缩小到12px以下本来就一定程度影响到可用性了,建议无视chrome的这个特性。 谷歌浏览器默认最小字体为12px,小于12px的字体它都以12px显示,有时我们需要字体小点,特别是在制作英文…...
springboot(ssm智慧校园之家长子系统 智慧校园系统Java系统
springboot(ssm0智慧校园之家长子系统 智慧校园系统Java系统 开发语言:Java 框架:ssm/springboot vue JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:mysql 5.7(或8.0)…...
RM3100 stm32驱动(硬件i2c)
目录 RM3100接线HAL库I2C函数HAL_I2C_Mem_ReadHAL_I2C_Mem_WriteHAL_I2C_Master_Transmit / HAL_I2C_Master_Receive例子 HSHAKE寄存器 cubemx配置RM3100寄存器驱动最终效果 RM3100接线 原理图 SA0 SA1接地,此时i2c设备地址为0100000,即0x20 如果SA0接…...
视觉学习(7) —— 接收数据和发送数据以及全局变量和浮点数
1、前提 创建一个四个字节的地址 2、发送数据 (1)直接发送数据 再观察地址里的值 与我们想要值不一样 输入0,而实际值则为 结论:直接输入值到地址,值会发生变化 (2)走全局变量发送数据 添加全…...
leetcode 1576. 替换所有的问号(easy)(优质解法)
链接:1576. 替换所有的问号 代码: class Solution {public String modifyString(String s) {char[] charSs.toCharArray();int lengthcharS.length;//遍历找到 ?for(int i0;i<length;i){if(charS[i]?){//遍历 a ~ z 选择一个合适的字符来…...
Chandra AI企业知识管理方案:文档智能检索与摘要生成
Chandra AI企业知识管理方案:文档智能检索与摘要生成 1. 引言 企业每天都在产生海量文档——合同、报告、PPT、技术文档...这些宝贵的知识资产往往散落在各处,查找困难,利用率低。传统的关键词搜索就像在黑暗中摸索,找到的文档可…...
3大核心策略:构建高效抖音内容采集系统的技术实践
3大核心策略:构建高效抖音内容采集系统的技术实践 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. …...
矿井排水系统直接关系到煤矿安全生产,今天咱们掰开揉碎了聊聊西门子S7-200 PLC控制三台水泵的实战经验。老规矩,先上干货再说原理
基于西门子PLC的煤矿排水系统控制,内容包括 [1]S7-200 PLC程序[2]MCGS6.2组态画面[3]电气图纸精品文档 共有3台水泵进行矿井排水,分别为1号水泵,2号水泵,3号水泵 其中1号,2号水泵是工作水泵,3号水泵是备用水…...
企业财务系统集成指南:如何用诺诺开放平台API搞定电子发票全流程(从签约到开票)
企业财务系统集成指南:诺诺开放平台电子发票全流程实战 当财务数字化转型成为企业降本增效的刚需,电子发票作为交易闭环的关键环节,其系统集成质量直接影响业务流畅度。本文将带您全景式拆解从商务对接到技术落地的完整链路,避开那…...
鸿蒙 ArkTS 高级样式复用:@Extend 装饰器完全解析(比 @Styles 更强大)
🔥前言:在上一篇文章《鸿蒙 ArkTS 样式复用:Styles 装饰器从入门到实战》中,我们学习了使用 Styles 实现基础样式复用。 但 Styles 不支持传参、不能使用组件专有属性,在复杂 UI 场景下能力有限。 📌 本文…...
【JAVA基础面经】深拷贝与浅拷贝
文章目录基本概念浅拷贝深拷贝重写 clone() 方法实现深拷贝使用序列化实现深拷贝使用复制构造函数或工厂方法基本概念 浅拷贝:创建一个新对象,然后将原对象的非静态字段(基本类型和引用类型)直接复制到新对象中。对于引用类型字段…...
Phi-3-mini-4k-instruct-gguf一文详解:GGUF模型加载机制与内存映射优化原理
Phi-3-mini-4k-instruct-gguf一文详解:GGUF模型加载机制与内存映射优化原理 1. GGUF模型格式概述 GGUF(GPT-Generated Unified Format)是llama.cpp团队设计的新一代模型文件格式,专门为大型语言模型优化。相比之前的GGML格式&am…...
Qwen3.5-2B入门指南:WebUI中Clear Image按钮对多轮图文对话的影响
Qwen3.5-2B入门指南:WebUI中Clear Image按钮对多轮图文对话的影响 1. 认识Qwen3.5-2B轻量化多模态模型 Qwen3.5-2B是Qwen3.5系列中的轻量级版本,仅有20亿参数规模。这个模型特别适合在资源有限的设备上运行,比如个人电脑、边缘计算设备等。…...
终极URL标准完整指南:从基础概念到实战应用
终极URL标准完整指南:从基础概念到实战应用 【免费下载链接】url URL Standard 项目地址: https://gitcode.com/gh_mirrors/url/url URL(统一资源定位符)是互联网的基石,每一个网页、图片、视频都通过URL来定位和访问。URL…...
3PEAK思瑞浦 TPT1051V-SO1R SOP8 CAN收发器
特性 符合IS011898标准支持CAN FD和最高达5 Mbps的数据速率典型环路延迟:110纳秒5V电源供应,3.0V~5.5VI0接口接收器共模输入电压:士30V总线故障保护:42VCAN网络最多支持110个节点结温范围从-40C到150C闩锁性能超过500mA总线引脚ESD保护:-8kV人体模型 -1.5kV充电设备…...
