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

news/2024/10/31 10:52:04/

有四种方法:

方法一: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.ppmy.cn/news/1543324.html

相关文章

Mac下载 安装MIMIC-IV 3.0数据集

参考blog MIMIC IV 3.0数据库安装方法_mimic数据下载-CSDN博客 MIMIC IV数据库安装(二)_mimic数据库安装-CSDN博客 MIMIC-IV3.0安装_mimic iv 3.0-CSDN博客 MIMIC-IV-v2.0安装教程_mimic iv 安装教程-CSDN博客 MIMIC IV 3.0数据库安装方法或者思路&…

JS中let var 和const区别

在JavaScript中,let、var 和 const 都是用来声明变量的关键字,但它们之间有几个关键的区别: 作用域(Scope): var 声明的变量拥有函数作用域(function scope),这意味着如果 var 变量在…

桌面程序设计类库MFC是气息奄奄,还是老当益壮呢?

提到桌面程序设计类库,很多人还能想到MFC,这个也忒老了吧?本文就介绍一下这个类库的前生今生,看看有哪些类库可以平替他。 一、MFC是啥,有什么优缺点 MFC(Microsoft Foundation Classes)是微软…

fastGpt

参考本地部署FastGPT使用在线大语言模型 1 rockylinx 1 ollama安装 在rockylinux中安装的,ollama由1.5G,还是比较大,所有采用在windows下下载,然后安装的方式,linux安装 tar -C /usr -xzf ollama-linux-amd64.tgz #…

第七章利用CSS和多媒体美化页面

7.1 CSS链接的美化 7.1.1.文字链接的美化 在HTML5中&#xff0c;<a></a >标签始终定义超链接&#xff0c;用于从一张页面链接到另一张页面。<a>元素最重要的属性是href 属性&#xff0c;它指示链接的目标&#xff0c;如果未设置href属性&#xff0c;后续多个…

【开源免费】基于SpringBoot+Vue.JS在线文档管理系统(JAVA毕业设计)

本文项目编号 T 038 &#xff0c;文末自助获取源码 \color{red}{T038&#xff0c;文末自助获取源码} T038&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

Java8中CompletableFuture.allOf的使用

目录标题 CompletableFuture.allOf(...)&#xff1b;CompletableFuture.allOf(...).get();CompletableFuture.allOf(...).join();总结如何优雅的处理异常呢&#xff1f; CompletableFuture.allOf(…)&#xff1b; CompletableFuture.allOf(…) 本身不会等待所有的 Completable…

【Kubernets】k8s进阶-深入了解一下Label的用法

文章目录 标签的用法标签选择器的用法查询方式 &#x1f914; 标签选择器有哪些高级用法&#xff1f;在Kubernetes中&#xff0c;标签选择器的高级用法非常灵活&#xff0c;允许进行复杂的资源选择和操作。以下是一些高级用法的例子&#xff1a;除了标签Label&#xff0c; 还有…