JavaScript数据类型判断

embedded/2024/11/23 12:34:18/

在 JavaScript 中,可以通过多种方式来判断数据类型,以下是常用的几种方法:


1. typeof 操作符

typeof 用于判断基本数据类型和部分对象类型。

javascript">console.log(typeof 123); // "number"
console.log(typeof "hello"); // "string"
console.log(typeof true); // "boolean"
console.log(typeof undefined); // "undefined"
console.log(typeof null); // "object" (这是一个已知的历史问题)
console.log(typeof {}); // "object"
console.log(typeof function() {}); // "function"
console.log(typeof Symbol()); // "symbol"

缺点:对 null 和对象类型的区分不够精确。


2. Object.prototype.toString.call()

更精确地判断所有类型,尤其是对象类型。

javascript">console.log(Object.prototype.toString.call(123)); // "[object Number]"
console.log(Object.prototype.toString.call("hello")); // "[object String]"
console.log(Object.prototype.toString.call(null)); // "[object Null]"
console.log(Object.prototype.toString.call(undefined)); // "[object Undefined]"
console.log(Object.prototype.toString.call([])); // "[object Array]"
console.log(Object.prototype.toString.call({})); // "[object Object]"
console.log(Object.prototype.toString.call(function() {})); // "[object Function]"
console.log(Object.prototype.toString.call(new Date())); // "[object Date]"

优点:可区分各种对象类型,比如 ArrayDate 等。


3. instanceof 操作符

判断某个对象是否属于某个构造函数的实例。

javascript">console.log([] instanceof Array); // true
console.log({} instanceof Object); // true
console.log(function() {} instanceof Function); // true
console.log(new Date() instanceof Date); // true

注意instanceof 依赖原型链,因此对于跨 iframe 或不同全局作用域的对象可能会失效。


4. Array.isArray()

专门用来判断是否为数组。

javascript">console.log(Array.isArray([])); // true
console.log(Array.isArray({})); // false

5. 自定义类型判断函数

结合 typeofObject.prototype.toString

javascript">function getType(value) {if (value === null) return "null";if (typeof value === "object") {return Object.prototype.toString.call(value).slice(8, -1).toLowerCase();}return typeof value;
}console.log(getType(123)); // "number"
console.log(getType("hello")); // "string"
console.log(getType([])); // "array"
console.log(getType(null)); // "null"
console.log(getType(new Date())); // "date"

总结

  • 快速判断:使用 typeof
  • 精确区分:使用 Object.prototype.toString.call()
  • 检查实例:使用 instanceof
  • 数组检测:使用 Array.isArray()

根据需求选择合适的方法!


http://www.ppmy.cn/embedded/139846.html

相关文章

android 动画原理分析

一 android 动画分为app内的view动画和系统动画 基本原理都是监听Choreographer的doframe回调 二 app端的实现是主要通过AnimationUtils来实现具体属性的变化通过invilate来驱动 wms来进行更新。这个流程是在app进程完成 这里不是我分析的重点 直接来看下系统动画里面的本地动…

【C++】拆分详解 - 多态

文章目录 一、概念二、定义和实现1. 多态的构成条件2. 虚函数2.1 虚函数的重写/覆盖2.2 虚函数重写的两个例外 3. override 和 final关键字4. 重载/重写/隐藏的对比5. 例题 三、纯虚函数和抽象类四、多态的原理1. 虚函数表2. 实现原理3. 动态绑定和静态绑定 总结 一、概念 多态…

skywalking es查询语句整理

查找特定时间范围内,与特定服务相关的service_relation_server_side指标 {"size": 0,"query": {"bool": {"must": [{"range": {"time_bucket": {"from": 202411221112,"to": 2024…

jmeter操作数据库

简介 Apache JMeter 是一个强大的开源工具,用于负载测试和性能测量。除了Web应用外,JMeter还可以用于测试各种数据库系统,包括MySQL。本文将详细介绍如何使用JMeter来测试MySQL数据库的性能。 环境准备 安装Java:确保你已经安装…

Notepad++--在开头快速添加行号

原文网址:Notepad--在开头快速添加行号_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Notepad怎样在开头快速添加行号。 需求 原文件 想要的效果 方法 1.添加点号 Alt鼠标左键,从首行选中首列下拉,选中需要添加序号的所有行的首列&#xff…

数字IC后端笔试面试题库 | 经典时序Timing计算题

今天小编给大家分享下近几年IC后端笔试题目中关于时序计算的典型真题。只要把这些题目搞懂,无论是校招还是社招,时序方面的题都没有问题了。 数字IC芯片设计实现 | 时序Timing Signoff check_timing检查解析 数字IC后端工程师应该如何快速入门提高工作…

垂起固定翼无人机搭载高清三光(4K可见+红外+激光测距)吊舱图像采集技术详解

垂起固定翼无人机搭载高清三光(4K可见红外激光测距)吊舱图像采集技术,是一种结合了无人机技术与先进光学传感技术的综合解决方案。以下是对该技术的详细解析: 一、垂起固定翼无人机 1. 特点: 垂直起降能力&#xff1…

指南: 如何在 MEV 项目中使用 Yul

这对我来说是一个反复出现的故事。我学习了一些 Solidity,发现了一个我想要研究的服务。代码看起来是这样的: Seaport Core: BasicOrderFulfiller.sol Solidity 代码在哪里?人们似乎不再使用普通的 Solidity 代码了 🥲 这种在智能…