前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >js 准确判断数据类型(终极方案)

js 准确判断数据类型(终极方案)

作者头像
andyhu
发布2023-06-23 11:11:00
1440
发布2023-06-23 11:11:00
举报
文章被收录于专栏:andyhu-大前端andyhu-大前端

前言

要判断JavaScript中的数据类型,首先得弄懂JavaScript中有哪些数据类型。然后还要知道在 JavaScript 中可以判断数据类型的有typeofinstanceof 这些,并且知道其不足,最终通过自己封装的方法来终极解决。

JavaScript中的数据类型有哪些

我把 js 中的数据类型大致分为基本数据类型(原始值)、引用类型这两种。

基本数据类型:

  • Number (数值,包括 NaN)
  • String (字符串)
  • Boolean (布尔类型)
  • Undefined (未定义或未初始化)
  • Null (空对象)
  • Symbol(唯一且不可变,可用做Object属性key)
  • BigInt(大整数,可表示容易精度的整型)

引用类型:

  • Object 对象
  • Array 数组
  • Function 函数
  • ...

typeof

typeof 运算符返回一个表示数据类型的字符串,用来判断基本数据类型(除 Null 外)

代码语言:javascript
复制
console.log(typeof 1)	        // number
console.log(typeof '1')	        // string
console.log(typeof true)        // boolean
console.log(typeof undefined)	// undefined
console.log(typeof BigInt(1))   // bigint

// 判断 null的时候会返回 object ,这个是js这个语言设计的缺陷
console.log(typeof null)  // object

typeof 缺点是不能正确的判断 null 类型

instanceof

instanceof 只能用来判断构造函数的 prototype 属性能否在某个实例对象的原型链上找到

代码语言:javascript
复制
function Person(name) {
    this.name = name
}

const person1 = new Person('andy hu');

console.log(person1 instanceof Person)	 // true

终极方案:自己封装方法

代码语言:javascript
复制
const getDataType = (value) => {
  if (value == null) return value + '';
  return typeof value === 'function' || typeof value === 'object' ?
    Object.prototype.toString.call(value).match(/^\[object (.+)\]$/)[1].toLowerCase() : typeof value
}

先判断如果是 null 则直接返回 null 字符串,再通过 typeof 判断,如果是基本数据类型(除 null 外)则返回正确类型,然后判断通过 Object.prototype.toString.call() 返回的所有类型都是 [object xx] ,我们只需要截取这个 xx,这个就是数据的真正类型。最后我们通过正则获取到 xx ,因为类型的字符串是小写字母,通过 tolowerCase 转换成小写。这些就能完美解决 typeof 判断数据类型的缺陷了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-06-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • JavaScript中的数据类型有哪些
  • typeof
  • instanceof
  • 终极方案:自己封装方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档