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

JavaScript 判断数据类型有哪些方法?

有四种方法:

方法一:typeof

typeof 运算符返回一个字符串,表示操作数的类型。下图是使用 typeof 判断类型的汇总:

可以看到,typeof 判断类型有两个缺点:

对 null 值的判断是 object,这个是历史遗留问题
对 object 的判断区分不出具体的对象类型
方法二: instanceof

instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。


// 定义构造函数
function C(){}
function D(){}
var o = new C();
o instanceof C; // true,因为 Object.getPrototypeOf(o) === C.prototype


方法三:Object.prototype.constructor

constructor 属性返回 Object 的构造函数(用于创建实例对象)。

注意:此属性的值是对函数本身的引用,而不是一个包含函数名称的字符串。

所有对象(使用 Object.create(null) 创建的对象除外)都将具有 constructor 属性。在没有显式使用构造函数的情况下,创建的对象(例如对象和数组文本)将具有 constructor 属性,这个属性指向该对象的基本对象构造函数类型。


const o = {}
o.constructor === Object // true

const o = new Object
o.constructor === Object // true


方法四:Object.prototype.toString

Object.prototype.toString 方法返回一个表示该对象的字符串。


const toString = Object.prototype.toString;
toString.call(new Date()); // [object Date]
toString.call(new String()); // [object String]

小练习:如何实现 instanceof?

答案:


function myInstanceof(left, right) {
  let proto = Object.getPrototypeOf(left); // 获取对象的原型
  let prototype = right.prototype;         // 获取构造函数的 prototype 对象

  // 判断构造函数的 prototype 对象是否在对象的原型链上
  while (true) {
    if (!proto) return false;
    if (proto === prototype) return true;

    proto = Object.getPrototypeOf(proto);
  }
}

作者:LeetCode
链接:https://leetcode.cn/leetbook/read/javascript-interview-2/7mduie/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


http://www.kler.cn/a/378585.html

相关文章:

  • Linux操作系统 ------(3.文本编译器Vim)
  • 学webpack之loader原理,让面试官跪下来唱征服
  • CentOS9 Stream 设置禁用IPV6
  • 音频模型介绍
  • nodejs 服务器实现负载均衡
  • 【快速上手】pyspark 集群环境下的搭建(Standalone模式)
  • 1、DevEco Studio 鸿蒙仓颉应用创建
  • Gradient descent algorithm
  • express搭建ts(TypeScript)运行环境
  • ChatGPT、Python和OpenCV支持下的空天地遥感数据识别与计算
  • 关联容器笔记
  • 【天线&空中农业】草莓果实检测系统源码&数据集全套:改进yolo11-HSFPN
  • 【华为HCIP实战课程31(完整版)】中间到中间系统协议IS-IS路由汇总详解,网络工程师
  • 使用ssh-key免密登录服务器或免密连接git代码仓库网站
  • ASAN ThreadSanitizer定位多线程(资源管理)
  • LabVIEW过程控制实验平台
  • Flutter InkWell组件去掉灰色遮罩
  • C#医学检验信息系统LIS源码,医院检验科信息管理系统源码
  • 编程八种语言谁是最受市场青睐的?
  • 【已解决】cra 配置路径别名 @ 后,出现 ts 报错:找不到模块“@/App”或其相应的类型声明。ts(2307)
  • 【jvm】Major GC
  • 基于SpringBoot的视频点播系统设计与实现
  • 【计算机基础——操作系统——Linux】
  • Cuebric:用AI重新定义3D创作的未来
  • 两道算法题
  • Unreal5从入门到精通之如何在VR中使用3DUI