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

【25春招前端八股文】——JS数据类型检测方式

检测数据类型

# typeof

总结:数组对象null都会被判断为object,其他判断都正确的类型。

  • 可以检测基本数据类型
  • null会检测为Object,因为null也是一个空的引用对象
  • 复杂数据类型只能检测functionObject

情况说明:

  1. 数组:这是因为 JavaScript 中的数组实际上是一种特殊的对象。
  2. null:这是一个历史遗留问题,在 JavaScript 的早期实现中存在的一个错误,可以理解为null 表示一个空或不存在的对象引用。
typeof undefined 			// "undefined"
typeof null 					// "object"
typeof 1 							// "number"
typeof "1" 						// "string"
typeof Symbol() 			// "symbol"
typeof function() {} 	// "function"
typeof {} 						// "object" typeof作用于未定义的变量不会报错,会返回一个undefined
!typeof判断null为object

是JS语言的一个历史遗留问题,在第一版JS代码中用32比特来存储值,通过值的1-3位来识别类型,前三位为000表示对象类型。而null是一个空值,二进制表示都位0,所以前三位也就是000,所以导致typeof null返回Object

!typeof判断强制转换

注意Number和String作为普通函数调用的时候,是把参数转化为相应的基本数据类型,也就是类似于做一个强制转换的操作,而不是默认当作构造函数来调用。

typeof Number(1)		//number
typeof String("1")	//StringArray(1,2,3)等价于new Array(1,2,3)

但是,Array()等价于new Array(),所以创建的是一个对象。

!typeof判断构造函数

类似于typeof new Number(1)

这些new Number(1)new String(1) 都是通过 new 操作符创建的构造函数的实例,而构造函数创建的是对象。

typeof new Number(1) // "object"
typeof new String(1) // "object"

# instanceof

总结:只能正确判断引用数据类型 ,不能判断基本数据类型。

情况说明:

instanceof可以正确判断对象的类型,其内部运行机制是判断原型链中能否找到该类型的原型

当使用 instanceof 时,它会按照以下步骤进行:
1. 检查右侧的构造函数的 prototype 属性。
2. 然后沿着左侧对象的 __proto__(或者使用 Object.getPrototypeOf() 方法)指针向上遍历其原型链。
3. 如果在原型链的某个地方找到了与右侧构造函数的 prototype 相同的对象,则返回 true4. 如果遍历到原型链的顶端(即 Object.prototype),还没有找到匹配的 prototype,则返回 false
!typeof和instanceof区别

返回值不同:

  • typeof返回一个运算数的基本类型
  • instanceof返回是布尔型

判断的数据类型不同:

  • t能正确判断基本数据类型,但是无法正确判断除了function外的数据类型
  • i不能判断基本数据类型,但是可以准确判断引用数据类型
!instanceof的实现原理*

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

instanceof运算符的原理是基于原型链的查找。当使用obj instanceof Construtor进行判断的时候,JS引擎会从obj原型链上查找Constructor。prototype是是否村站,如果存在返回true,否则继续在原型链上查找。如果查找到的原型链的顶端仍然没有找到,则返回false

instanceof运算符只能用于检查某个对象是否是某个构造函数的实例,不能用于基本类型的检查。

# toString ?

toString() 是 Object 的原型方法,调用该方法,默认返回当前对象的 [[Class]] 。这是一个内部属性,其格式为 [object Xxx] ,其中 Xxx 就是对象的类型

对于 Object 对象,直接调用 toString() 就能返回 [object Object] 。而对于其他对象,则需要通过 call / apply 来调用才能返回正确的类型信息。

# constructor

总结:是一个对象的内置属性,它包含了一个指向创建该对象的构造函数的引用,也可以检测出字面量方式创建的对象类型,因为字面方式创建,实际由对应类创建而出。

例子:

//-------例子1--------//
function Person(name) {this.name = name;
}var person = new Person('Kimi');
console.log(person.constructor === Person); // true
console.log(person.constructor === Function); // true,因为Person是函数的实例//-------例子2--------//
function Animal(name) {this.name = name
}const dog = new Animal('大黄')console.log(dog.constructor === Object) // false
console.log(dog.constructor === Animal) // true//-------例子3--------//const arr = []console.log(arr.constructor === Array)//Array

# isArray

总结:用于检测数组

const arr = []
Array.isArray(arr)

杂题

!如何判断null

如果想要判断null,可以直接使用全等运算符===或者使用Object.protptype.toString方法

// 使用`===`全等运算符来判断
let a = null
a === null // true// 使用 Object.prototype.toString 方法
let a = null;
let result = Object.prototype.toString.call(a);
console.log(result); // 输出 '[object Null]'

相关文章:

【25春招前端八股文】——JS数据类型检测方式

检测数据类型 # typeof 总结:数组、对象、null都会被判断为object,其他判断都正确的类型。 可以检测基本数据类型null会检测为Object,因为null也是一个空的引用对象复杂数据类型只能检测function和Object 情况说明: 数组&#x…...

Kafka的学习路径规划

目录标题 1. 记(记忆力)Kafka核心概念Kafka关键配置 2. 懂(理解力)Kafka工作原理Kafka核心功能Kafka架构设计 3. 网(知识网络)技术栈整合用例和场景 4. 拓(全面拓展)学习材料多样化内…...

linux模拟试题

Linux 基础阶段考试笔试模拟试卷 审核人:王旺旺 一.填空题(每题 1 分,共 30 分) 1.验证 httpd 服务是否启动的命令是_______ 答:systemctl status httpd 或 netstat -anptl 或 ss -anpt 2.将目录 xxhf 下所有文件的所属组改为 user1 的命令是_______ 答:chown -R ,user1 …...

Qt-界面优化QSS

QSS介绍 先说下CSS: 在⽹⻚前端开发领域中, CSS 是⼀个⾄关重要的部分. 描述了⼀个⽹⻚的 "样式". 从⽽起到对⽹⻚美化的作⽤。 Qt 仿照 CSS 的模式, 引⼊了 QSS, 来对 Qt 中的控件做出样式上的设定 。 CSS的功能很强大,QSS要逊色一些&#…...

QT实战-qt各种菜单样式实现

本文主要介绍了qt普通菜单样式、带选中样式、带子菜单样式、超过一屏幕菜单样式、自定义带有滚动条的菜单样式, 先上图如下: 1.普通菜单样式 代码: m_pmenu new QMenu(this);m_pmenu->setObjectName("quoteListMenu"); qss文…...

深度学习基础03_BP算法(下)过拟合和欠拟合

目录 一、BP算法(下) 0、反向传播代码回顾 写法一: 写法二(更常用): 1、BP中的梯度下降 1.数学描述 2.传统下降方式 3.优化梯度下降方式 指数加权平均 Momentum AdaGrad RMSProp Adam(常用) 总结 二、过拟合和欠拟合 1、概念 1.过拟合 …...

web vue 滑动选择 n宫格选中 九宫格选中

页面动态布局经常性要交给客户来操作,他们按时他们的习惯在同一个屏幕内显示若干个子视图,尤其是在医学影像领域对于影像的同屏显示目视对比显的更为重要。 来看看如下的用户体验: 设计为最多支持5行6列页面展示后,右侧的布局则动…...

Spring Boot整合EasyExcel

Spring Boot整合EasyExcel主要涉及到以下几个步骤: 1.添加EasyExcel依赖到Spring Boot项目的pom.xml文件中。 2.创建数据模型类,用于映射Excel文件中的数据。 3.编写读取和写入Excel的服务。 以下是一个简单的例子: 1.添加EasyExcel依赖 …...

微软表示不会使用你的 Word、Excel 数据进行 AI 训练

​微软否认使用 Microsoft 365 应用程序(包括 Word、Excel 和 PowerPoint)收集数据来训练公司人工智能 (AI) 模型的说法。 此前,Tumblr 的一篇博文声称,雷德蒙德使用“互联体验”功能抓取客户的 Word 和 Excel 数据,用…...

JavaScript(一)

1.JavaScript 基本使用 2.JavaScript简单事件 3.JavaScript修改样式 4.JavaScript数据类型 JavaScript和Java有什么关系 知识点一 JavaScript基本使用 JS写在哪 还有一种写在中间的&#xff0c;也就是<head>里面 JS一些注意事项 JS修改元素内容 #JS获取对象<…...

Day 32 动态规划part01

今天正式开始动态规划! 理论基础 无论大家之前对动态规划学到什么程度,一定要先看 我讲的 动态规划理论基础。 如果没做过动态规划的题目,看我讲的理论基础,会有感觉 是不是简单题想复杂了? 其实并没有,我讲的理论基础内容,在动规章节所有题目都有运用,所以很重要!…...

winform跨线程更新界面

前言&#xff1a; 大家好&#xff0c;我是上位机马工&#xff0c;硕士毕业4年年入40万&#xff0c;目前在一家自动化公司担任软件经理&#xff0c;从事C#上位机软件开发8年以上&#xff01;我们在开发C#程序的时候&#xff0c;有时候需要在非Ui主线程更新界面&#xff0c;为了…...

【合作原创】使用Termux搭建可以使用的生产力环境(二)

前言 上期文章没看的可以先从上期文章开始看起 【合作原创】使用Termux搭建可以使用的生产力环境&#xff08;一&#xff09;-CSDN博客 目前我们已经完成了FinalShell ssh连接手机Termux的功能了&#xff0c;这期我们继续朝我们的目标前进。今天早上有读者进群以为生成环境指…...

微积分复习笔记 Calculus Volume 2 - 3.3 Trigonometric Substitution

3.3 Trigonometric Substitution - Calculus Volume 2 | OpenStax...

vue2+svg+elementui实现花瓣图自定义el-select回显色卡图片

项目需要实现花瓣图&#xff0c;但是改图表在echarts&#xff0c;highCharts等案例中均未出现&#xff0c;有类似的韦恩图&#xff0c;但是和需求有所差距&#xff1b; 为实现该效果&#xff0c;静态图表上采取svg来手动绘制花瓣&#xff1a; 确定中心点&#xff0c;以该点为中…...

记录一次网关异常

记一次网关异常 网关时不时就会出现下面的异常。关键是不知道什么时候就会报错&#xff0c;并且有时候就算什么都不操作&#xff0c;也会导致这个异常。 ERROR org.springframework.scheduling.support.TaskUtils$LoggingErrorHandler - Unexpected error occurred in schedul…...

计算机网络——不同版本的 HTTP 协议

介绍 HTTP&#xff0c;即超文本传输协议&#xff08;HyperText Transfer Protocol&#xff09;&#xff0c;是应用层的一个简单的请求-响应协议&#xff0c;它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。本文将介绍 HTTP 协议各个版本。 HTTP/1.0 HTTP/1…...

使用 LLaMA-Factory 微调

git clone https://github.com/hiyouga/LLaMA-Factory.git cd LLaMA-Factory pip install -e . pip install tf-keras[dataset_info.json](dataset_info.json) 包含了所有可用的数据集。如果您希望使用自定义数据集&#xff0c;请**务必**在 dataset_info.json 文件中添加*数据…...

vue2 虚拟DOM 和 真实DOM (概念、作用、Diff 算法)

虚拟 DOM 和 真实DOM&#xff08;概念、作用、Diff 算法&#xff09; 1.1 概念 真实 DOM&#xff08;Document Object Model&#xff09;&#xff1a;是浏览器中用于表示文档结构的树形结构。 <h2>你好</h2>虚拟DOM&#xff1a;用 JavaScript 对象来模拟真实 DOM…...

GEOBench-VLM:专为地理空间任务设计的视觉-语言模型基准测试数据集

2024-11-29 ,由穆罕默德本扎耶德人工智能大学等机构创建了GEOBench-VLM数据集&#xff0c;目的评估视觉-语言模型&#xff08;VLM&#xff09;在地理空间任务中的表现。该数据集的推出填补了现有基准测试在地理空间应用中的空白&#xff0c;提供了超过10,000个经过人工验证的指…...

【电路板】基于matlab模拟电路板激光加工中的热分布【含Matlab源码 15559期】

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到海神之光博客之家&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49…...

从原理图到Ping通:我的STM32F407 RMII以太网调试笔记(含LAN8720硬件差异处理)

从原理图到Ping通&#xff1a;我的STM32F407 RMII以太网调试笔记&#xff08;含LAN8720硬件差异处理&#xff09; 第一次点亮STM32F407的以太网接口时&#xff0c;那种成就感至今难忘。但在此之前&#xff0c;我经历了整整两周的煎熬——原理图反复检查、PCB打样两次、软件调试…...

UE5.6低延迟视频推流实战:从采集编码到RTMP传输全链路解析

1. 这不是“加个插件就能播”的事&#xff1a;UE5.6视频流推送的真实战场 很多人看到“UE5.6推送视频流”这个标题&#xff0c;第一反应是&#xff1a;“哦&#xff0c;用Media Player播放本地MP4&#xff1f;或者接个RTMP推流插件&#xff1f;”——我试过&#xff0c;也踩过坑…...

从官方例程到实际项目:AXI Timer v2.0在Zynq平台上的避坑指南与调试实录

从官方例程到实际项目&#xff1a;AXI Timer v2.0在Zynq平台上的避坑指南与调试实录 在嵌入式系统开发中&#xff0c;定时器是最基础也最关键的硬件外设之一。Xilinx提供的AXI Timer v2.0 IP核因其灵活的配置选项和丰富的功能特性&#xff0c;成为Zynq平台上实现精确时间控制的…...

FlashAttention 为什么对序列长度这么“敏感”?

FlashAttention 为什么对序列长度这么“敏感”&#xff1f; 很多朋友在昇腾 NPU 上测 FlashAttention 性能时&#xff0c;都会遇到一个让人挠头的现象&#xff1a;为什么 seq_len512 时&#xff0c;FlashAttention 比标准 Attention 还慢&#xff1f;非要等到 seq_len2048 才开…...

5分钟掌握跨平台资源下载:res-downloader视频号批量下载终极指南

5分钟掌握跨平台资源下载&#xff1a;res-downloader视频号批量下载终极指南 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader …...

三步突破原神60FPS限制:安全高效的游戏性能优化方案

三步突破原神60FPS限制&#xff1a;安全高效的游戏性能优化方案 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock genshin-fps-unlock 是一款专为《原神》PC版玩家设计的开源帧率解锁工具&…...

软件架构设计师考试——系统安全性与保密性设计知识点全总结(考前冲刺版,超1万字)

临近软件架构设计师考试&#xff0c;系统安全性与保密性设计是考试的核心模块&#xff0c;贯穿上午场信息系统综合知识&#xff08;15-20分&#xff09;、下午场案例分析&#xff08;25-35分&#xff09;及论文写作&#xff08;高频命题方向&#xff09;&#xff0c;是“稳拿分…...

APT32F110 RTC实战:从配置校准到低功耗应用全解析

1. 项目概述与核心价值最近在捣鼓爱普特APT32F110这块开发板&#xff0c;发现它内置的RTC&#xff08;实时时钟&#xff09;模块挺有意思。对于很多嵌入式项目来说&#xff0c;时间戳记录、定时唤醒、低功耗运行这些功能都离不开一个靠谱的RTC。APT32F110作为一款主打高性价比和…...

为Hermes Agent配置自定义Provider并接入Taotoken聚合模型服务

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 为Hermes Agent配置自定义Provider并接入Taotoken聚合模型服务 Hermes Agent 是一款功能强大的智能体开发工具&#xff0c;它支持通…...