当前位置: 首页 > news >正文

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” 五种。 对于数组、对象来说,其关系错综复杂&…...

Python对于时间相关模块的学习记录(time,datetime等模块)

1,time.time() 获得从计算机开始出生到现在的秒数(也成时间戳),可以时间相减计算流逝时间 说明 :擅长时间相减计算流逝时间 导入方法 import time import time# 1,time.time 获得从计算机开始出生到…...

【C#】获得所有可见窗口信息

【背景】 由于自己的瘦客户端上的Windows自带截图软件功能被阉割&#xff0c;所以自己写了一个&#xff0c;其中有窗口截图功能&#xff0c;涉及到获得所有可见窗口的信息。 【代码】 public WindowInfo[] GetAllDesktopWindows(){//用来保存窗口对象 列表List<WindowInf…...

ffmpeg的基本功能介绍

之前对ffmpeg有一个模糊的印象&#xff0c;后来经过一些项目对ffmpeg有了深入的认识&#xff0c;这里总结下。 最开始对ffmpeg的印象是可以对视频进行一些处理操作&#xff0c;但是做哪些操作又不是很清楚&#xff0c;知其然不知其所以然。下面对于ffmpeg的功能进行一个总结&a…...

QECon大会亮相产品,支持UI自动化测试?RunnerGo

最近在gitee上看见一款获得GVP&#xff08;最有价值开源项目&#xff09;的测试平台RunnerGo&#xff0c;看他们官网介绍包含了接口测试、性能测试、自动化测试。知道他们有saas版可以试用&#xff0c;果断使用了一下&#xff0c;对其中场景管理和性能测试印象深刻&#xff0c;…...

Linux开关机相关的命令解析

前言 Linux直接拔电源关机 ,内存中的东西还没保存到硬盘。所以有时候会导致数据丢失或者有些服务起不来。所以最好直接命令行关机就像windows电脑需要界面关机一样。而不是强制拔电源 关机命令 halt halt:关机但是不关闭电源,需要手动关闭电源(加p参数会关闭电源),不…...

C++二分查找算法的应用:俄罗斯套娃信封问题

本文涉及的基础知识点 二分查找 题目 给你一个二维整数数组 envelopes &#xff0c;其中 envelopes[i] [wi, hi] &#xff0c;表示第 i 个信封的宽度和高度。 当另一个信封的宽度和高度都比这个信封大的时候&#xff0c;这个信封就可以放进另一个信封里&#xff0c;如同俄罗…...

redis如何保证和mysql数据的一致性

Redis和MySQL是两种不同的数据库系统&#xff0c;它们在数据一致性方面有不同的特点和应用场景。保证Redis和MySQL数据的一致性通常需要考虑以下几个方面&#xff1a; 双写策略&#xff1a; 一种常见的方法是采用双写策略&#xff0c;即将更新操作同时写入Redis和MySQL。这确保…...

SpringBoot整合Redisson,赶紧整起来!

SpringBoot整合Redisson 一、Redisson 是什么&#xff1f;二、使用场景三、使用步骤1.引入相关依赖2.application.yml配置3.创建RedissonConfig4.开始使用 总结 提示&#xff1a;以下是本篇文章正文内容 一、Redisson 是什么&#xff1f; Redisson是一个基于Java的开源的、高…...

测试Whisper效果

先去官方上面看看&#xff0c;是否有对应的测试结果 简单找了一下&#xff0c;没找到对应的测试数据 去hugging face 上面找对应的数据集&#xff0c;发现没有现成的数据 找到了几个数据集&#xff0c;但是是收费的 101 Hours – Scene Noise Data by Voice Recorder 1,29…...

Seata 四种事务模式

Seata 是一款开源的分布式事务解决方案&#xff0c;致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式&#xff0c;为用户打造一站式的分布式解决方案。 全文参考文献&#xff1a;中文文档 TC (Transaction Coordinator) - 事务…...

超好用的IDEA插件推荐,写完代码直接调试接口

Apipost推出IDEA插件非常省时高效&#xff0c;写完代码直接可以进行调试&#xff0c;而且支持生成接口文档&#xff0c;真是后端神器啊&#xff01; 可以点击下方链接安装更新或在插件商店中搜索安装 下载链接&#xff1a;https://plugins.jetbrains.com/plugin/22676-apipos…...

发送post请求、携带cookie、响应对象、高级用法

发送post请求 请求体中&#xff0c;两种方式&#xff1a;data{} ⇢ \dashrightarrow ⇢ 编码格式 urlencoded ⇢ \dashrightarrow ⇢ keyvalue&keyvaluejson{} ⇢ \dashrightarrow ⇢ 编码格式是json 使用方式&#xff1a; resrequests.post(url) 模拟登录 import …...

JMeter接口测试性能测试

目前最新版本发展到5.0版本&#xff0c;需要Java7以上版本环境&#xff0c;下载解压目录后&#xff0c;进入\apache-jmeter-5.0\bin\&#xff0c;双击ApacheJMeter.jar文件启动JMemter。 1、创建测试任务 添加线程组&#xff0c;右击测试计划&#xff0c;在快捷菜单单击添加-…...

MongoDB——MongoDB删除系统自带的local数据库

一、MongoDB删除系统自带的local数据库 1.1、linux环境进入mongo客户端 输入 mongo 命令&#xff0c;进入命令行客户端 进入admin库&#xff0c;并登录&#xff0c;查看所有数据库 #进入admin库 use admin #并登录admin db.auth("username","password")…...

【LeetCode刷题-链表】--203.移除链表元素

203.移除链表元素 方法&#xff1a;定义一个节点指向头节点head&#xff0c;避免头结点单独操作 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* …...

Microsoft Dynamics 365 CE 扩展定制 - 3. SDK企业功能

在本章中,我们将介绍以下内容: 服务器端并发控制客户端并发控制在事务中执行请求批处理请求暂存数据导入创建早期绑定的实体类扩展CrmSvcUtil用Filter扩展CrmSvcUtil以生成选项集枚举使用CRM配置迁移工具跨实例迁移配置简介 回顾Dynamics CRM的历史,该产品经过多年的发展以…...

人工智能基础_机器学习016_BGD批量梯度下降求解多元一次方程_使用SGD随机梯度下降计算一元一次方程---人工智能工作笔记0056

然后上面我们用BGD计算了一元一次方程,那么现在我们使用BGD来进行计算多元一次方程 对多元一次方程进行批量梯度下降. import numpy as np X = np.random.rand(100,8) 首先因为是8元一次方程,我们要生成100行8列的X的数据对应x1到x8 w = np.random.randint(1,10,size = (8…...

硬件测试(二):波形质量

一、信号质量测试 信号在传输的过程中&#xff0c;一般不是标准的矩形波信号&#xff0c;信号质量测试即通过示波器测试单板硬件的数字信号和模拟信号的各项指标&#xff0c;包括电源、时钟、复位、CPU小系统、外部接口&#xff08;USB、网口、串口&#xff09;、逻辑芯片(CPLD…...

PostgreSQL 数据库日志相关参数

PostgreSQL数据库的配置主要是通过修改数据目录下的 postgresql.conf和pg_hba.conf文件来实现的。 如果想从其他机器上登录该数据 库&#xff0c;需要把监听地址改成实际网络的地址&#xff0c;一种简单的方法是把地址 改成“*”&#xff0c;表示在本地的所有地址上监听&#…...

零下20度实测:国产SysMax PCAN FD在寒区标定中的稳定性与兼容性全记录

零下20度极限挑战&#xff1a;SysMax PCAN FD在寒区汽车电子标定中的实战全解析 当清晨的内蒙古满洲里气温骤降至-20℃&#xff0c;大多数电子设备早已进入"冬眠"状态&#xff0c;而我们的汽车电子标定工作却必须继续。在这个被称为"中国冷极"的地区&#…...

速腾RS-M1激光雷达到手后,Windows电脑上5分钟搞定点云可视化(保姆级避坑指南)

速腾RS-M1激光雷达开箱实战&#xff1a;Windows系统5分钟点云可视化全攻略 拆开速腾RS-M1激光雷达包装箱的那一刻&#xff0c;多数人的第一反应既兴奋又忐忑——这台价值数万元的设备能否快速展现它的三维感知能力&#xff1f;作为一款广泛应用于机器人导航、三维测绘的高精度雷…...

大模型开发避坑:彻底理清 Skill(技能)与 MCP(模型 上下文协议)的本质区别与协同

在目前的 AI 应用开发圈子里&#xff0c;各种新名词层出不穷&#xff1a;Skill&#xff08;技能&#xff09;、Plugin&#xff08;插件&#xff09;、Function Calling&#xff08;函数调用&#xff09;、Tool&#xff08;工具&#xff09;、MCP&#xff08;模型上下文协议&…...

3步实现音频自由:QMCFLAC2MP3高效解密与跨平台应用指南

3步实现音频自由&#xff1a;QMCFLAC2MP3高效解密与跨平台应用指南 【免费下载链接】qmcflac2mp3 直接将qmcflac文件转换成mp3文件&#xff0c;突破QQ音乐的格式限制 项目地址: https://gitcode.com/gh_mirrors/qm/qmcflac2mp3 一、音乐收藏者的困境&#xff1a;当专有格…...

Win10自带应用太多?3分钟教你用PowerShell精准卸载(附常用应用命令大全)

Win10系统精简指南&#xff1a;PowerShell精准卸载内置应用全攻略 每次打开开始菜单&#xff0c;那些从未使用过的内置应用图标是否让您感到烦躁&#xff1f;作为技术从业者&#xff0c;我们更希望拥有一个干净高效的工作环境。本文将带您深入探索PowerShell在Windows系统管理中…...

保姆级图解:ARM CHI协议里的Credit机制,到底是怎么防止芯片“堵车”的?

ARM CHI协议中的Credit机制&#xff1a;芯片互连的智能交通控制系统 想象一下早高峰时段的城市交通——如果没有红绿灯和匝道流量控制&#xff0c;整个道路系统将在几分钟内陷入瘫痪。类似地&#xff0c;在现代多核处理器和芯片间互连架构中&#xff0c;Credit机制正是扮演着这…...

COMSOL多场耦合地应力平衡开挖与衬砌支护案例:带衬砌与钢衬支护的实践研究

COMSOL 地应力平衡后开挖及衬砌支护案例&#xff08;带衬砌、钢衬&#xff09;隧道开挖模拟最头疼的就是初始地应力场的平衡问题。前些天用COMSOL折腾了个带衬砌支护的案例&#xff0c;今天把关键步骤拆开说说。咱们直接从地应力平衡开始&#xff0c;到开挖后钢衬安装一气呵成。…...

Apache Parquet Java性能优化秘籍:5个关键技巧提升读写速度300%

Apache Parquet Java性能优化秘籍&#xff1a;5个关键技巧提升读写速度300% 【免费下载链接】parquet-java Apache Parquet Java 项目地址: https://gitcode.com/gh_mirrors/pa/parquet-java Apache Parquet Java是处理大数据列式存储的终极解决方案&#xff0c;通过合理…...

SRS+WebRTC直播搭建实录:用安卓手机做推流器的5个关键步骤

SRSWebRTC直播搭建实录&#xff1a;用安卓手机做推流器的5个关键步骤 移动直播的轻量化趋势正在重塑内容创作生态。当专业摄像机与PC推流设备显得笨重时&#xff0c;一台随身携带的安卓手机配合SRSWebRTC技术栈&#xff0c;就能实现低于500ms延迟的直播推流方案。本文将拆解从设…...

千问GEO生成式引擎优化技术方案

千问GEO生成式引擎优化技术方案 技术支持&#xff1a;拓世网络技术开发工作室 针对通义千问&#xff08;Qwen&#xff09;的生成式引擎优化&#xff08;GEO&#xff09;并非简单的关键词堆砌&#xff0c;而是一场关于“认知抢占”的技术战役。在2026年的当下&#xff0c;随着通…...