JavaScript 笔记

news/2025/4/1 6:11:30/文章来源:https://www.cnblogs.com/kFM9j5ONLe/p/18799677

基本数据类型

集合引用类型

类型判断

typeof

typeof 适合基础类型的判断。

缺点:

  • 无法区分 null 和 object(typeof null === 'object' 是一个设计缺陷)。
  • 无法区分具体对象类型(如数组和普通对象)。
console.log(typeof 123);          // 'number'
console.log(typeof 'hello');      // 'string'
console.log(typeof true);         // 'boolean'
console.log(typeof undefined);    // 'undefined'
console.log(typeof null);         // 'object' (历史遗留问题)
console.log(typeof []);           // 'object'
console.log(typeof {});           // 'object'
console.log(typeof function(){}); // 'function'

instanceof

instanceof 用于判断对象是否是某个构造函数的实例。

缺点:

  • 不适用于原始类型。
  • 不适用于跨 iframe 或窗口的环境(因为原型链不一致)。
console.log([] instanceof Array);       // true
console.log({} instanceof Object);      // true
console.log([] instanceof Object); // true,因为 Array 是 Object 的子类
console.log(() => {} instanceof Function); // true
console.log(new Date() instanceof Date); // true

Array.isArray

这是专门用来判断数组的方法,是 ES5 中新增的。

console.log(Array.isArray([]));    // true
console.log(Array.isArray({}));    // false

值得注意的是,Array.isArray 不会受跨窗口的影响,因为它是通过检查对象的内部属性([[Class]])来判断是否为数组,而不是依赖于原型链。

constructor 属性

通过访问对象的 constructor 属性可以判断类型。

console.log((123).constructor === Number);       // true
console.log('hello'.constructor === String);     // true
console.log(true.constructor === Boolean);       // true
console.log([].constructor === Array);           // true
console.log({}.constructor === Object);          // true

缺点:

  • 无法判断 null 和 undefined(它们没有 constructor 属性)。
  • 可能会被重写。

Object.prototype.toString.call

这是判断具体类型的最常用方法,通过调用对象的 toString 方法返回具体的类型信息:'[Obejct [[Class]]]'

console.log(Object.prototype.toString.call(123));        // '[object Number]'
console.log(Object.prototype.toString.call('hello'));    // '[object String]'
console.log(Object.prototype.toString.call(true));       // '[object Boolean]'
console.log(Object.prototype.toString.call(null));       // '[object Null]'
console.log(Object.prototype.toString.call(undefined));  // '[object Undefined]'
console.log(Object.prototype.toString.call([]));         // '[object Array]'
console.log(Object.prototype.toString.call({}));         // '[object Object]'
console.log(Object.prototype.toString.call(() => {}));   // '[object Function]'
console.log(Object.prototype.toString.call(new Date())); // '[object Date]'

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/907728.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

氩气保护焊接气体流量控制

该节气装置通过以下方法,为您减少30%-50%的焊接气体的用量。在整个焊接过程中,气流与焊接电流自动同步调节。 “较大电流 — 较多气体/较小电流 — 较少气体”极高速气阀即使在焊接停止时间很短的情况下,也可开闭。通过持续的气体保护以及预先“编程”,脉冲气体可进一步减小…

2025.3.29日 清华大学-郝泽旭 的模拟赛

2025.3.29日 清华大学-郝泽旭 的模拟赛原题可以转化为给定了 \(k\) 个起点,求 \(k\) 个终点,使得路径两两无公共点的所有路径之和的最大值。 注意到先上再下的路径可以拆成两部分,即从关键点开始先向上到达一个点后再向下可以看作一条从关键点向上的路径与一条从非关键点向上…

DDL转换,一键导出表结构,生成DDL语句【转载】

源代码:https://gitee.com/wsitm/RuoYi-RDBMS 一、驱动管理驱动管理功能,用户能够上传并配置各类数据库驱动包。无论是常见的MySQL、Oracle、PostgreSQL、SQL Server,还是更多小众的数据库类型,只需上传相应的驱动包,即可迅速完成配置。 这一功能不仅简化了驱动安装与更新…

库卡机器人维修KSS26045硬件错误维修

库卡机器人在使用过程中,可能会遇到常见的KSS26045硬件故障,这些机器人故障大致可以归结为以下几种类型: 先是电源故障。一旦电源系统出现问题,库卡机器人可能会面临无法启动或无法维持正常运行的困境。为了诊断电源故障,可以利用万用表等专业工具来精确测量电源的输出电压…

PHP历理 精准处理数学表达式中的小数末尾零

<?php /*** 精准处理数学表达式中的小数末尾零* @param string $expression 原始数学表达式* @return string 处理后的规范表达式*/ function formatMathExpression(string $expression): string {// 正则匹配所有小数(包含整数部分和小数部分)return preg_replace_callb…

判断 Python 代码是不是 AI写的几个简单方法

作者:Laurel W来源:Adobe作为一名数据科学和数学老师,我其实不介意我的学生使用像 ChatGPT 这样的 LLM,只要它是用来辅助他们学习,而不是取代学习过程。加州理工学院的申请文书指南启发了我为编程和机器学习课制定 AI 使用政策: 哪些是加州理工申请文书中不道德的 AI 使用…

Golang学习Ⅱ

iota,函数多返回值,init函数,import导包 常量定义方式:const a int = 10; const{ a=10 b=20 }1 const{ 2 BeiJing = iota*10 //iota为0 3 ShangHai 4 NanJing 5 } //使用const定义枚举,BeiJing为0,ShangHai为10,NanJing为20View Code

SpringBoot整合RabbitMQ--Direct和Topic模式

一.Direct模式 这几个模式使用SpringBoot的整合和前面使用源生Java整合其实是差不多的,故而步骤就不再详细赘述了,直接先导入依赖:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId&g…

CMS和G1的区别

悲观者从机会中看到困难。乐观者从困难中看到机会。 ——温斯顿丘吉尔区别一:使用的范围不一样:CMS收集器是老年代的收集器,可以配合新生代的Serial和ParNew收集器一起使用。 G1收集器收集范围是老年代和新生代。不需要结合其他收集器使用区别二:STW的时间:CMS收集器以最小的停…

nfls 游记。

省流:三场模拟赛。rk1(2) rk3 rk4Day 1 3.26: 在前面的博客里面。 下午补了 noip2024 T1 。我怎么还是不会写????? Day 2 3.27: 没有模拟赛。组合数学专题。 写了一堆数学题。 中午逃离校园去吃了饭,终于有饭吃了!!!!111 晚上打了一场比赛,后三题全拼的暴力 /q…

PHP2 攻防世界

这题进去之后看到的:介绍该网站?gs,用f12,ctrl+u看都没看出啥。 看了别的博客才知道要看index.phps。第一次知道还有index.phps这个文件好像是扫描index.php的源代码啥的。操蛋 然后就看index.phps里的代码吧:这里看代码, `<?php if("admin"===$_GET[id]) {…

垃圾回收算法哪些阶段会STW

悲观者从机会中看到困难。乐观者从困难中看到机会。 ——温斯顿丘吉尔标记-复制算法应用在CMS新生代(ParNew是CMS默认的新生代垃圾回收器)和G1垃圾回收器中。标记复制算法可以分为三个阶段:标记阶段,即从GC Roots集合开始,标记活跃对象; 转移阶段,即把活跃对象复制到新的内存…