JavaScript判断数据的类型

SAP 物料账前期没有运行的解决方法 If you use the actual costing (material ledger), you must have completely closed all period-end closing operations in the actual costing for the penultimate period prior to the period shift. Use the '... 阅读详情

注:纯手打,如有错误欢迎评论区交流!
转载请注明出处:https://blog.youkuaiyun.com/testleaf/article/details/147954653
编写此文是为了更好地学习前端知识,如果损害了有关人的利益,请联系删除!
本文章将不定时更新,敬请期待!!!
欢迎点赞、收藏、转发、关注,多谢!!!

一、typeof:判断基本类型

​​特点​​:能识别基本类型(除 null 外),但对引用类型返回 object。

typeof 'hello'      // 'string'
typeof 42           // 'number'
typeof true         // 'boolean'
typeof undefined    // 'undefined'
typeof Symbol()     // 'symbol'
typeof BigInt(10)   // 'bigint'
typeof function(){} // 'function'

// 局限性
typeof null         // 'object' (历史遗留问题)
typeof []           // 'object'
typeof {}           // 'object'

二、instanceof:判断实例原型链

​​特点​​:检查对象是否是某个构造函数的实例(对基本类型无效)。

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

// 局限性
'abc' instanceof String  // false (基本类型不适用)
null instanceof Object   // false

三、Object.prototype.toString.call():终极方案

​​特点​​:精准识别所有类型(推荐)。

Object.prototype.toString.call('hello')   // '[object String]'
Object.prototype.toString.call(42)        // '[object Number]'
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(/regex/)   // '[object RegExp]'
Object.prototype.toString.call(new Date())// '[object Date]'

封装成通用函数​​:

function getType(obj) {
  return Object.prototype.toString.call(obj).slice(8, -1).toLowerCase();
}
getType([]) // 'array'
getType(null) // 'null'

四、专门方法判断特定类型

1、判断数组

Array.isArray([]) // true

2、判断 NaN

Number.isNaN(NaN) // true (注意:全局 isNaN() 会先尝试转数字)

3、判断 null 或 undefined

value === null      // 仅判断 null
value === undefined // 仅判断 undefined
value == null       // 同时判断 null 或 undefined

五、ES6+ 新增类型判断

1、Map/Set/WeakMap/WeakSet

Object.prototype.toString.call(new Map())    // '[object Map]'
Object.prototype.toString.call(new Set())    // '[object Set]'

2、Promise

Object.prototype.toString.call(Promise.resolve()) // '[object Promise]'

3、自定义类

class MyClass {}
Object.prototype.toString.call(new MyClass()) // '[object Object]' (需自定义 toStringTag)

六、特殊案例处理

1、区分对象和数组

function isObject(obj) {
  return obj !== null && typeof obj === 'object' && !Array.isArray(obj);
}

2、判断纯对象(Plain Object)

function isPlainObject(obj) {
  return Object.prototype.toString.call(obj) === '[object Object]' &&
         Object.getPrototypeOf(obj) === Object.prototype;
}
isPlainObject({})     // true
isPlainObject([])     // false
isPlainObject(new Date()) // false

七、终极方案对比表

方法适用场景局限性
typeof基本类型(除 null)null 返回 object
instanceof引用类型(检查构造函数)不适用于基本类型
Object.prototype.toString​​所有类型​​(最精准)无
Array.isArray()仅判断数组仅适用于数组
=== null 或 === undefined精确判断 null/undefined仅适用于这两个值

八、实际应用示例

function typeCheck(value) {
  const type = Object.prototype.toString.call(value).slice(8, -1);
  switch (type) {
    case 'String':
    case 'Number':
    case 'Boolean':
    case 'Null':
    case 'Undefined':
    case 'Symbol':
    case 'BigInt':
      return type.toLowerCase();
    default:
      return type; // 'Array', 'Object', 'Date', 'RegExp' 等
  }
}

typeCheck(null)      // 'null'
typeCheck([])        // 'Array'
typeCheck(new Date())// 'Date'

九、总结

1、​​基本类型​​:优先用 typeof(注意 null 的坑)。
​​2、引用类型​​:用 Object.prototype.toString.call()。
​​3、数组​​:直接用 Array.isArray()。
4、​​特殊值​​:null 和 undefined 用 === 严格判断。
5、​​ES6+ 类型​​:结合 toString 和专用方法(如 Promise.resolve())。

使用 Python 调用 GitHub REST API 爬取 GitHub 仓库信息(完整指南) GitHub 提供了功能强大的 REST API,允许开发者通过编程方式访问 GitHub 上的仓库、用户、提交记录、PR(Pull Request)等信息。GitHub REST API 是 GitHub 官方提供的 API 接口,支持通过 HTTP 请求来操作 GitHub 上的资源。在本文中,我们将使用 Python 编写一个完整的爬虫程序,调用 GitHub 的 REST API 来爬取 GitHub 仓库的信息。目前 GitHub 使用的主要是 v3 版本的 REST API。 阅读详情

相关推荐

密码学:一文看懂Base64算法

Base64常常在我们开发中出现,我们可能只知道它是一串乱码(看不懂的符号),知道有时候知道我们需要把一些数据进行base64编码,有时候需要进行Base64解码。但是却不知道它的作用是什么?它存在的意义是什么?还有它是如何生成的?如何编码和解码?上述的疑问相信在你读完本篇文章之后烟消云散。下面开始正文。Base64是什么?它和加密解密操作有什么关系吗?没错,这就是经过Base64编码后的字符串。对它解码后,我们获得以下内容点个关注,是对我持续创作的最大的鼓励!

Shujie 1万+

【javascript】判断对象类型

你可以通过Array.isArray(myObj) 或者Object.prototype.toString.call(myObj) === “[object Array]” 来安全的检测传过来的对象是否是一个数组。注意:在改变对象 obj 的原型链的情况下,constructor属性有可能被修改的,Foo.prototype 属性的值也有可能改变,这些都会导致检测出的结果不正确。在JavaScript中,每个对象都有一个constructor属性,它引用了实例化该对象的构造函数,常用于判断未知对象的类型。

qq_45406325的博客 6924

使用RustDesk或者AnyDesk的TCP隧道实现Codesys系列PLC的远程调试和下载

Codesys远程调试

exat500g的博客 7272

js数据类型判断

四种方法 typeof、instanceof、constructor、Object.prototype.toString.call() 1 .typeof console.log( typeof 100, //"number" typeof 'abc', //"string" typeof false, //"boolean" typeof undefined, ...

田兴的博客 5840

SMARTFORMS实战:用Template+Loop实现复杂表格布局(附避坑指南)

本文深入解析了SMARTFORMS中Template与Loop组合实现复杂表格布局的实战技巧,突破传统TABLE组件的限制。通过多级表头、单元格合并等案例演示,提供从基础架构搭建到动态数据绑定的完整解决方案,并分享性能优化与异常处理的最佳实践,助力开发者高效应对企业级报表设计挑战。

numpy6sculptor的博客 805

转义序列字符(\0,\n,\r,\t,\v,\a,\f,\b,\\,\‘,\“,\?)详解,转义字符对应的全称,输出结果和对应的ASCII码值详解;

转义序列字符(\0,\n,\r,\t,\v,\a,\f,\b,\\,\',\",\?)详解,转义字符对应的全称,输出结果和对应的ASCII码值详解;

南城花开过的博客 3万+

JS判断对象的类型的几种方法

使用 typeof 操作符:typeof 操作符可以用来判断一个值的基本类型,例如 string、number、boolean、undefined、function 和 object。但是 typeof null 的结果是 ‘object’,这是一个历史遗留问题。使用 Object.prototype.toString.call() 方法:这种方法可以判断所有类型的值,包括基本类型和对象。使用 instanceof 操作符来判断一个对象是否是某个构造函数的实例,得到的结果是布尔类型。

Summer_Uncle的博客 2752

本地部署大模型框架 LMStudio和Ollama+WebUI对比

之前我们的辣妈系列文章介绍了很多如何使用Ollama框架+OpenWebUI做很多大模型框架下相关的事情。之后我们也尝试了LMStudio这样一体化的工具。本文介绍下LMStudio 和 Ollama+Web UI 各有优劣,具体选择取决于你的需求。

ms44的专栏 4027

js判断对象类型的两种方法

在js 中 , 有一种判断数据基本类型的方法 typeof , 只能判断5中基本类型:即 “number”,”string”,”undefined”,”boolean”,”object” 五种。 用法为: typeof 1 typeof str console.log(typeof 1) //打印出 number typeof 'a' == 'string' //结果为true...

卓原的进化之旅 2万+

30. 用GPT-4自动生成测试用例的完整流程

利用GPT - 4生成测试用例面临的主要问题包括:如何准确地将软件需求转化为GPT - 4能够理解的输入提示,以确保生成的测试用例覆盖所有关键功能;如何评估生成的测试用例的有效性和充分性;如何处理生成的测试用例中的错误或不合理之处;以及如何将生成的测试用例集成到现有的测试框架中。

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 472

第8章 - 异构系统的协同控制及最优控制 --> 最优控制

异构系统的协同控制及最优控制 --> 协同控制

赵继超的笔记 2259

判断js对象类型的多种方法,附详细说明

概述 js中有多种方式可以判断对象的类型,每种判断类型的方式都有自己的优缺点。这篇文章文章中我们一共总结了4种方法: instanceof typeof Object.prototype.toString.call constructor 1. instanceof 使用方法:obj instanceof Object,左操作数是对象实例,右操作数是构造函数。 instanceof关键字判断的方式如下,假定o是对象实例、c是构造函数: 如果o继承自c.prototype,则o instanceof c的

qq_42367749的博客 4240

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

JavaScript篇:JS数据类型大乱斗:谁才是类型判断的王者?

大家好,我是小杨,一个在前端圈子里摸爬滚打多年的开发者。今天咱们来聊聊 JavaScript的数据类型,以及如何准确判断它们。

欢迎来到我的前端博客!这里汇集了关于前端开发的最新技术、实用工具和经验分享。我将为你提供详细的教程、代码示例和实战案例,帮助你掌握Web开发的核心概念和技能。不论你是初学者还是有经验的开发者,这个博客都适合你。 1083

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

[Javascript]:JS数据类型、类型判断、函数function与Function的使用

因为之前学过Java,在学习JS时,对JS的数据类型、function和Function的使用概念容易搞混淆,理解不怎么深刻。遂将这些知识点和概念梳理一遍,以便自己和他人理解。如有错误,敬请谅解。       知识点会涉及到:JS数据类型、JS的类型判断方式、函数创建方式、function与Function的区别、匿名函数的使用、函数特点以及函数重载问题。 Javascript数据类型

我只是个程序员。 1万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

JavaScript判断是否为数值类型 - js的数据类型

需求 数值,或者数值型字符串,比如"123"可以通过校验。 其他类型不能通过校验。 举例 输入 结果 145 √ “145” √ “145ccc” × true × undefined × null × 对象 × 分析 首先要明确,js中一共有7种数据类型: 数值;字符串;布尔值;undefined;null;对象;symbol(ES6) 其中,对象包括:狭义的对象(object);数组(array);函数(function) 根据需求,我们需要的是先判断是数值或

weixin_43924896的博客 5442

JavaScript——判断js数据类型(类型检测)

1、typeof运算符 typeof算是最常见的了,使用它会返回一个字符串,适合函数对象和基本类型(js中的基本类型:number、string、boolean、null、undefined、object[对象])的判断。 console.log("测试number:"+typeof 1); console.log("测试string:"+typeof "str"); console.l

yCharlee的博客 4万+

【js基础】javascript中关于数据类型一些知识和类型判断

JavaScript的数据类型包括两类:原始类型(primitive type)和对象类型(object type)。 JS中原始类型包括数字(Nubmer)、字符串(String)和布尔值(Boolean),还有两个特殊的类型:空(null)和未定义(undefined)。 JS中除了原始类型之外的就是对象(Object)了,对象数属性(prototype)的集合,每个属性都是一个键值对。其

qq_29380855的博客 483

JS基本语法-JavaScript数据类型,数据类型的判断,undefined,Object,NULL,空类型

字符串(String)、数字(Number)、布尔(Boolean)、数组(Array)、对象(Object)、空(Null)、未定义(Undefined)。 JavaScript 不是强类型语言。与许多其他编程语言不同,JavaScript 不定义不同类型的数字,比如整数、短、长、浮点等等。

记录和分享程序人生的点点滴滴 413

【javascript】判断JS数据类型的四种方法

基本类型与引用类型 在 ECMAScript 规范中,共定义了 7 种数据类型,分为 基本类型 和 引用类型 两大类,如下所示: 基本类型:String、Number、Boolean、Symbol、Undefined、Null 引用类型:Object 基本类型也称为简单类型,由于其占据空间固定,是简单的数据段,为了便于提升变量查询速度,将其存储在栈中,即按值访问。 引用类型也称为复杂类型,由于...

Umbrella_Um的博客 654

js 判断undefined和null_JavaScript 数据类型与类型判断详解

一、JavaScript 数据类型JavaScript 数据类型有两种,分别是基本数据类型和引用数据类型。基本数据类型NumberStringBooleanUndefinedNullSymbol (ES6 新增,表示独一无二的值)引用数据类型ObjectFunctionArray我们来详细了解一下这两种数据类型的特点1.基本数据类型值不可变基本类型的值是 不可变 的var name = 'java...

weixin_39770165的博客 362

js 判断各种数据类型

/** * 判断各种js数据类型 */ export default { /** * 判断是否是字符串 * @param value * @returns {boolean} */ isString(value) { return typeof value === "string"...

qq_38358436的博客 247

JavaScript学习总结(2)——JavaScript数据类型判断

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33744141的博客 205

js中如何判断一个变量的数据类型

在某些情况下,我们可能需要对特定类型的对象进行更细粒度的检查。这时,可以通过组合上述方法创建自定义的类型检查函数。obj!== null &&!// true// false// false// false这个例子展示了如何构建一个用于检测纯对象(即非数组、非函数、非内置对象的普通对象)的辅助函数。类似的,可以根据业务需求定制其他类型的检查逻辑。

一个做过前端开发的产品经理,经历过睿智产品的折磨导致脱发之后,励志要翻身"农奴"把歌唱,一边打入敌人内部一边持续提升自己,为我们广大开发同胞谋福祉,坚决抵制睿智产品折磨我们码农兄弟! 1081
上一篇: 前端JavaScript力扣HOT100刷题【1-50】
下一篇: Vue3知识点梳理
testleaf
博客等级 码龄7年 3514粉丝 72原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

testleaf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值