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

JavaScript如何实现类型判断?

判断一个数据的类型,常用的方法有以下几种:

  • typeof
  • instanceof
  • Object.prototype.toString.call(xxx)

下面来分别分析一下这三种方法各自的优缺点

typeof

typeof的本意是用来判断一个数据的数据类型,所以返回的也是一个数据类型。但是会遇到下面这些问题:

  • 无法判断 null
  • 无法判断除了 function 之外的引用类型。
// 无法判断 null。
console.log(typeof null); // 输出 'object',原因在文章末尾解释。// 无法判断除了 function 之外的引用类型。
console.log(typeof []); // 'object'
console.log(typeof {}); // 'object'

incetance of

可以看到,type of无法精确判断对象的引用类型。所以在判断一个对象的引用类型时一般使用incetance of关键字。

console.log([] instanceof Array); // true
console.log(str1 instanceof String); // false,无法判断原始类型。

但是incetance of无法准确判断原始数据类型,只能用来判断数据是否是某个类的引用。到这里就能发现,如果把incetance oftype of结合起来基本就能判断所有的数据类型了。

但是,别忘记还有一个null,对于null还需要进行特殊的处理。

typeof null;	// objectif (target === null) {return "null";
}

结合这两种方法基本已经掌握了判断数据类型的手段了,但是如果去写一下你还是会发现很麻烦,你必须枚举每一种类型利用trueorfalse判断数据类型。

这里的null必须单独判断,因为这是第一版JavaScript留下来的一个bug。

JavaScript 中不同对象在底层都表示为二进制,而 JavaScript 中会把二进制前三位都为 0 的判断为 object 类型,而 null 的二进制表示全都是 0,自然前三位也是 0,所以执行 typeof 时会返回 'object'

这个 bug 牵扯了太多的 Web 系统,一旦改了,会产生更多的 bug,令很多系统无法工作,也许这个 bug 永远都不会修复了。

Object.prototype.toString.call(xxx)

这个时候就不得不提到下面这种方法了:

Object.prototype.toString.call([])	// [object Array]

这个方法会返回统一格式的字符串:[object Xxx]。然后再取出后面的xxx即可得到准确的数据类型。对于取出后面的xxx可以使用多种方法,包括但不限于字符切片、正则表达式。

这里调用call()方法是为了让this指向数组对象自身。

http://www.xdnf.cn/news/248455.html

相关文章:

  • C语言 指针(2)
  • spring-cloud-alibaba最新版本聚合项目创建
  • 机器学习Day15 LightGBM算法
  • 探秘数据结构:构建高效算法的灵魂密码
  • GD32F407单片机开发入门(二十二)红外避障传感器模块实战含源码
  • 项目经验不够被拒3次?
  • 电流测量 I/V转换
  • 前端vue3项目学习
  • python3基础
  • 数位 DP 的关键
  • ProCCD:复古CCD相机应用,重现经典胶片感
  • 2025年五一杯数学建模竞赛赛题浅析-助攻快速选题
  • 深入探讨宾馆一次性牙刷价格,市场价格区间差异大
  • esp32cam开发板的引脚使用和测试
  • 注册登录页面项目
  • dify+ollama+知识库 部署
  • 数字智慧方案6156丨智慧医联体信息化解决方案(50页PPT)(文末有下载方式)
  • 今天的python练习题
  • Spring AOP---面向切面编程由认识到使用
  • pycharm安装的插件怎么显示在右侧
  • 【无标题】四色拓扑收缩模型中环形套嵌结构的颜色保真确定方法
  • 【信息系统项目管理师-论文真题】2024上半年(第一批)论文详解(包括解题思路和写作要点)
  • C++11新特性_自动类型推导_decltype
  • Java内存对象实现聚合查询
  • Unity SpriteMask(精灵遮罩)
  • PMP-第八章 项目质量管理
  • 攻防世界 dice_game
  • 多智能体空域协同中的伦理博弈与系统调停
  • LegalOne:本土与国际视野融合的法律评级,大湾区律师及律师事务所榜单申报启动
  • 【统计方法】方差分析(ANOVA):判断数据差异的统计方法