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

前端知识点---Javascript中检测数据类型函数总结

文章目录

  • 01 typeof 运算符
  • 02 instanceof 运算符
  • 03 Array.isArray()
  • 04 Object.prototype.toString.call()
  • 05 constructor 属性
  • 06 isNaN() 和 Number.isNaN() (常用)
  • 07 isFinite() 和 Number.isFinite()
  • 08 typeof null 是 "object" 的问题

01 typeof 运算符

返回值是一个字符串
全部类型都是可以检测的

typeof 42;            // "number"
typeof "hello";       // "string"
typeof true;          // "boolean"
typeof undefined;     // "undefined"
typeof null;          // "object" (这是历史遗留问题)
typeof Symbol();      // "symbol"
typeof BigInt(123);   // "bigint"
typeof {};            // "object"
typeof [];            // "object"
typeof function(){};  // "function"

注意:无法区分 null 和普通对象,数组和普通对象都会返回 “object”。

02 instanceof 运算符

用于检测对象是否是构造函数
检测引用类型时非常有用(如数组、对象、自定义类等)。

[] instanceof Array; // true
{} instanceof Object; // true
new Date() instanceof Date; // true
function(){} instanceof Function; // true

适用场景:
检查对象的具体类型,尤其是用户定义的类或构造函数。

03 Array.isArray()

专门用于检查值是否是数组。
Array.isArray([]); // true
Array.isArray({}); // false
适用场景:
专门区分数组和其他对象。

04 Object.prototype.toString.call()

可以准确检测所有内置对象的类型,返回更具体的类型信息。

Object.prototype.toString.call(42); // “[object Number]”
Object.prototype.toString.call(“hello”); // “[object String]”
Object.prototype.toString.call(true); // “[object Boolean]”
Object.prototype.toString.call(null); // “[object Null]”
Object.prototype.toString.call(undefined); // “[object Undefined]”
Object.prototype.toString.call([]); // “[object Array]”
Object.prototype.toString.call({}); // “[object Object]”
Object.prototype.toString.call(function(){}); // “[object Function]”
Object.prototype.toString.call(new Date()); // “[object Date]”
Object.prototype.toString.call(/regex/); // “[object RegExp]”
Object.prototype.toString.call(new Map()); // “[object Map]”
Object.prototype.toString.call(new Set()); // “[object Set]”
Object.prototype.toString.call(new WeakMap()); // “[object WeakMap]”

适用场景:
适用于更精确的数据类型检查,尤其是区分类似类型(如数组与对象、正则与对象等)。

05 constructor 属性

通过 constructor 可以访问对象的构造函数,从而判断对象的类型。

(42).constructor === Number; // true
(“hello”).constructor === String; // true
(true).constructor === Boolean; // true
({}).constructor === Object; // true
([]).constructor === Array; // true
(function() {}).constructor === Function; // true

适用场景:
检查引用类型的具体构造函数。
注意:
可能被篡改或重写,因此不总是可靠。

06 isNaN() 和 Number.isNaN() (常用)

isNaN():判断值是否为 NaN(非数字值或计算失败返回 NaN 时)。
Number.isNaN():判断值是否严格为 NaN(类型安全)。

isNaN(“hello”); // true (被隐式转换后是NaN)
isNaN(NaN); // true

Number.isNaN(“hello”); // false
Number.isNaN(NaN); // true

07 isFinite() 和 Number.isFinite()

isFinite():检测值是否是有限数(可以自动转换类型)。
Number.isFinite():检测值是否是有限数,但不进行类型转换。

isFinite(42); // true
isFinite(“42”); // true (字符串被转换为数字)
isFinite(Infinity); // false
isFinite(NaN); // false

Number.isFinite(42); // true
Number.isFinite(“42”); // false (严格检测类型)

08 typeof null 是 “object” 的问题

由于历史原因,typeof null 返回 “object”,所以使用 typeof 检测时需要注意。

Object.prototype.toString.call(null) === “[object Null]”; // 更准确

总结
typeof 简单、快速检测基本类型 检查基础数据类型
instanceof 检查某对象是否为某类实例 检查引用类型和自定义类
Array.isArray() 专门检测数组 确认某变量是否是数组
Object.prototype.toString.call() 精确识别所有内置类型对象 高精度类型判断
constructor 查看对象的构造函数 检查引用类型构造器
isNaN / Number.isNaN 检测 NaN 判断是否为无效数字
isFinite / Number.isFinite 检测有限数字 检查是否有限数
每种方法都有自己的适用场景,根据需要选择合适的方法。


http://www.mrgr.cn/news/70613.html

相关文章:

  • 力扣 189. 轮转数组
  • 中国电信星辰大模型:软件工厂与文生视频技术的深度解析
  • stm32cubemx+VSCODE+GCC+makefile 开发环境搭建
  • 移动端左右滑动切换页面效果(纯-JavaScript)
  • 【linux】(17)压缩和解压
  • 数据结构C语言描述3(图文结合)--双链表、循环链表、约瑟夫环问题
  • HTML常用标签
  • Python 多进程日志管理:最佳实践与实战指南
  • 图像增强的100种方法
  • 【AI学习】Mamba学习(十五):关于S4模型计算优化的再学习
  • http协议与内外网的划分
  • 【论文阅读】医学SAM适配器:适应医学图像分割的任意分割模型
  • glsl中vec4是行矩阵还是列矩阵
  • 满200减30,怎么样用python计算凑单正好满足要求呢?
  • [DEBUG] 服务器 CORS 已经允许所有源,仍然有 304 的跨域问题
  • 重构代码之移动字段
  • FTP、ISCSI、CHRONY、DNS、NFS、DOCKER、MARIADB、NGINX、PHP、CA各服务开启方法
  • 【科研积累】大模型的认知笔记
  • AUTOSAR_EXP_ARAComAPI的7章笔记(2)
  • Bililive-go开源录屏工具:本地部署远程管理精彩直播不在错过
  • 【韩老师零基础30天学会Java 】06章 数组、排序和查找
  • 常用的损失函数pytorch实现
  • Oracle OCP认证考试考点详解082系列18
  • 代码随想录算法训练营Day14 | 226.翻转二叉树、101. 对称二叉树、104.二叉树的最大深度、111.二叉树的最小深度
  • 信息安全数学基础(47)域的结构
  • PCL 点云分割 分割圆柱体模型