【图解面试】JS系列 - 如何回答数据类型相关问题(上)

1. JS中的数据类型有哪些,他们的区别是什么?

  • 知识点大纲
    在这里插入图片描述

  • 语言组织(示例)

要点:数量 → 种类 → 区别

JS中的数据类型主要有 8 种,分为两大类 基础数据类型引用数据类型

基础数据类型中主要有 Number、String、Boolean、Null、Undefined、Symbol和BigInt

引用数据类型有Object,Object下又有一些内置的子类主要分为基础引用类型和集合类引用类型,基础引用类型比如基础类型包装类、Date、RegExp、单例全局对象window和Math等等,集合类引用对象有Array、Set、Map等等

两者的区别主要从三个方面体现:a. 存储方式不同 - 基础类型存放在栈内存中,引用类型存储在堆内存中 b. 复制方式不同 - 基础类型是复制一个副本,具有不可变性,引用类型复制的堆内存的地址引用,指向的还是同一个堆内存 c. 参数传递不同 - 参数传递本质还是复制一个变量的副本,所以区别类似于复制方式

2. 如何判断不同的数据类型

  • 知识点大纲

在这里插入图片描述

  • 语言组织(示例)

要点:方式的种类 → 每个种类的优缺点 → 通用的方式

判断数据类型的方式比较多,一般根据不同的场景采取对应的判断方式;

如果判断一个基础数据类型可以采用 typeof 的方式,它的返回结果为对应类型的字符串,但是 typeof 对于引用类型都是返回Object,判断的时候有两个例外,一个是null,null虽然是基础类型但是返回的还是object,另外一个是function,虽然function是引用类型,但是返回的是function

如果判断一个对象是否是属于某个类的实例,可以使用instanceof,格式为 A instanceof B,用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性

比较通用的一种方式是:Object.prototype.toString.call(),既可以检测基础数据类型,也可以检测引用类型,返回的格式为中括号内,第一个是object,第二个就是首字母大写的类型。之所以不能直接调用对象上的toString方法,是Array,Function等比较典型的方法都重写了toString方法,所以是调用的是Object对象原型上的toString方法。

  • 代码运行
let a = 123; // typeof => number, Object.prototype => [object Number]
let b = 'string'; // typeof => string, Object.prototype => [object String]
let c = true;// typeof => boolean, Object.prototype => [object Boolean]
let d = null;// typeof => object, Object.prototype => [object Null]
let f = undefined;// typeof => undefined, Object.prototype => [object Undefined]
let g = Symbol();// typeof => symbol, Object.prototype => [object Symbol]
let e = BigInt(123);// typeof => bigint, Object.prototype => [object BigInt]
let h = [1,2,3];// typeof => object, Object.prototype => [object Array]
let i = {a:1,b:2};// typeof => object, Object.prototype => [object Object]
let k = function(){};// typeof => function, Object.prototype => [object Function]
  • 推荐资料

JavaScript的数据类型及其检测:https://github.com/ljianshu/Blog/issues/4

3. 你刚刚有提到Symbol,那你在日常开发中有使用过么?

  • 知识点大纲
    在这里插入图片描述

  • 语言组织(示例)

要点:提出背景 → 具有哪些特性 → 如何在项目中使用 三个方面递进回答

Symbol是在ES6中提出的第7种数据类型,也是一种基础数据类型。

(介入背景)因为对象的属性只能是字符串,所以我们在调用别人提供的对象时可能会涉及到一些属性的增加或修改而跟原本的属性产生命名冲突,也是基于这一背景,在ES6中提出了Symbol机制来保证属性的唯一性。

(介入特性)Symbol 类型的变量都是独一无二的,可以保证不会与其他属性名产生冲突,

(引出场景)正是因为它这种不可变的特性,在我们日常开发中主要分为两种场景:业务开发场景中使用,去声明一个枚举类型对象或者全局常量等,保证常量属性的唯一性,另一种场景是在日常组件开发中,使用Symbol去定义一些组件的ID值及状态值等。

4. 0.1+0.2不等于0.3,你是怎么理解的呢

  • 知识点大纲
    在这里插入图片描述

  • 语言组织(示例)

从 遵循的标准 → 标准导致的问题 → JS中提出的方案 → 最后问题的答案

这个涉及到JS的数值类型遵循的算术标准:IEEE 754 二进制浮点数算术标准,在JS中使用的是双精度浮点数,即用64位表示数值。这64位又被分成了3个域,符号位、指数域和尾数域。从右到左分别编号063的话,编码051就表示尾数域,编码52~62表示指数域,编码63就表示符号位。

由这种表示方式就导致了两个问题:精度问题和大小问题,精度问题由尾数域导致,它只有52位去表示精度,像0.1、0.2这种无限循环小数就会存在精度丢失问题,大小问题则是由指数域导致的,大于等于2的1024次方的数值就无法表示了,也就出现了数值中的特殊数值Infinity。这两种问题并不是JS中特有的,而是使用IEEE 754 标准浮点数表示法的语言都存在的问题。

在JS中主要有两种解决方案,一个是ES2020提出的 BigInt数据类型用来存储计算大数据,没有精度限制;另一种是机器精度,即使存在误差,但是只要在最小误差内就可以忽略不计,这个精度大概是2的-52次方,也就是JS能表示的最小精度值,在ES6中,把这个值放到了Number.EPSILON常量中。

  • 资料(IEEE754标准、指数偏移值计算详情可参考以下链接)

维基百科:https://zh.wikipedia.org/wiki/IEEE_754

百度文库:https://wenku.baidu.com/view/b50d16c9a6c30c2259019ede.html?wkts=1704806640422&bdQuery=IEEE+754

在这里插入图片描述

5. 说一下你了解的数组方法有哪些?

  • 知识点大纲
    在这里插入图片描述

  • 语言组织(示例)

要点: 产生数组 → 操作数组 → 遍历数组,在 操作数组 部分又分两个方向回答:会改变原数组和不会改变原数组,切忌想到哪个说哪个,毫无逻辑感

常用到的数组方法,主要涉及到三个方面的:创建数组类、操作数组类和遍历数组类。

创建数组类的主要有:Array.of()、Array.from(),这两个都是ES6中新增的数组方法,Array.of()用于将一组数值转换为数组,Array.from()用于将类数组对象转换为数组。

操作数组类的主要 会改变原数组类 和 不会改变原数组类两种,会改变原数组类的涉及到基本都是增删改相关的函数:push/pop、unshift/shift、copyWithin、fill、splice、reverse、sort等,不会改变原数组的主要是查找拼接相关的函数:indexOf、lastIndexOf、includes、concat、join、slice、toString等。

还有一些对数组的遍历操作:forEach、map、some、every、filter、reduce、find等等

  • 推荐链接

数组API及常见排序算法:https://blog.csdn.net/weixin_41305441/article/details/119008708

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

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

相关文章

11Spring IoC注解式开发(下)(负责注入的注解/)

1负责注入的注解 负责注入的注解,常见的包括四个: ValueAutowiredQualifierResource 1.1 Value 当属性的类型是简单类型时,可以使用Value注解进行注入。Value注解可以出现在属性上、setter方法上、以及构造方法的形参上, 方便起见,一般直…

【电商API接口】jd.item_search按关键字搜索京东商品返回值和参数说明

item_search-按关键字搜索商品 [查看演示] API测试工具 注册开通 jd.item_search 公共参数 请求地址: 申请调用KEY测试 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥api_nameString是API接口名称&#xff08…

Vue学习笔记六--Vue3学习

1、Vue3的优势 2、创建Vue3工程 前提:node -v 查看node版本,需要在16.0及以上 创建命令 npm init vuelatest,先安装create-vue然后创建项目 然后执行npm run dev 提示 sh: vite: command not found,需要执行npm i重新安装依赖,之后再执行np…

【目标跟踪】多相机多目标跟踪

文章目录 前言一、计算思路二、代码三、结果 前言 单相机目标跟踪之前博客已经有过基本介绍,本篇博客主要介绍一种多相机目标跟踪的计算方法已知各相机内外参,如何计算共视区域像素投影?废话不多说,见下图。 同一时刻相机A与相机…

大争之世,GPT Store 正式上线将带来哪些影响?

生产者视角,ChatGPT周边商业边界全面打开,应用生产零门槛、抄袭无限,看谁能持续创新取胜。 用户视角,有益应用可选性广,可根据自身需求选择适用场景,臻于个性化体验。 请访问http://chat.openai.com/gpts进…

路由器实验总结(静态路由配置)

1、静态路由的配置 R2(config)#int s0/0/0 R2(config)#ip add 192.168.3.2 255.255.255.0 R2(config)# no shut R1(config)#int s0/0/0 R1(config)#ip add 192.168.3.1 255.255.255.0 R1(config)# no shut串口的配置是这样的,静态路由如下: R2(config)#…

el-dialog 内部添加固定定位 ,背景颜色超出问题 (粘性定位)

使用固定定位会出现背景颜色超出的问题 position: fixed;left: 0;bottom: 0;width: 80%;height: 50px;line-height: 50px;text-align: center;background-color: #fff;overflow: hidden; 解决办法 粘性定位 position: sticky;bottom: 0;width: 100%;height: 50px;line-height…

ABeam×StartUp丨ABeam旗下德硕管理咨询(深圳)新创部门拜访「光子晶体科技」

光子晶体科技 ABeamStartUp 光子透明芯片 显示技术 光学材料 近日,ABeam 旗下德硕管理咨询(深圳)有限公司(以下简称“ABeam-SZ”)新创部门一行拜访了深圳光子晶体科技有限公司(以下简称“光子晶体科技”…

内存淘金术:Redis 内存满了怎么办?

欢迎来到我的博客,代码的世界里,每一行都是一个故事 内存淘金术:Redis 内存满了怎么办? 前言LRU(Least Recently Used)算法LFU(Least Frequently Used)算法定期淘汰策略内存淘汰事件…

vulhub中的Nginx 文件名逻辑漏洞(CVE-2013-4547)

目录 Nginx 文件名逻辑漏洞(CVE-2013-4547) 1.cd到CVE-2013-4547 2.执行docker-compose up -d 3.查看靶场是否开启成功 4.访问浏览器 5.上传含有一句话木马的图片 6.burp抓包 7.在shell.gif加空格 8.放包 9.访问路径 10.继续抓包 11.在aa后面…

EasyExcel简单实例

EasyExcel简单实例 准备工作场景一:读取 Student 表需求1:简单读取需求2:读取到异常信息时不中断需求3:读取所有的sheet工作表需求4:读取指定的sheet工作表需求5:从指定的行开始读取 场景二:写入…

鸿蒙原生应用再添新丁!京东入局鸿蒙

鸿蒙原生应用再添新丁!京东入局鸿蒙 来自 HarmonyOS 微博1月10日消息,#京东启动鸿蒙原生应用开发#!优惠信息、派送进度都可以随时随地便捷查询。双方将携手为消费者带来全场景“多快好省”购物体验,更智能,更贴心&…

Java多线程并发篇----第七篇

系列文章目录 文章目录 系列文章目录前言一、说一说自己对于 synchronized 关键字的了解二、说说自己是怎么使用 synchronized 关键字,在项目中用到了吗?synchronized关键字最主要的三种使用方式三、什么是线程安全?Vector是一个线程安全类吗?四、volatile关键字的作用?前…

将WebGL打包的unity项目部署至Vue中

一、webgl打包 创建一个空项目(或者直接使用现成的项目都可以)这里以该空项目为例子 注意: 如果你的unity项目中有文字,不需要使用unity默认的字体,需要更改它的字体,否则在最后生成的页面中会显示不出来…

【NVIDIA】Jetson Orin Nano系列:烧写Ubuntu22.04

1、简介 最新的sdk-manager已经可以安装到Ubuntu22.0,也支持在 Jetson Orin Nano 上烧写Ubuntu22.04。 官网介绍:https://developer.nvidia.com/sdk-manager 2、版本介绍 JetPack版本:https://developer.nvidia.com/embedded/jetpack-ar…

读《Mixtral of Experts》

摘要 稀疏混合专家(SMoE) 语言模型Mixtral 8x7B(那大概可以理解成他是一个缝合怪,把所有的任务模型缝合到一起,然后有一个类似打分投票的路由机制来针对输入问题选择任务子模型从而得到针对性的结果。)。Mi…

免费简单好用的 webshell 在线检测:支持 php、jsp、asp等多格式文件

话不多说,直接上图上链接:https://rivers.chaitin.cn/?share3d4f2e8aaec211eea5550242c0a8170c 还是比较好用的,支持 PHP、JSP 文件 webshell 检测,看官方解释文档,引擎使用静态文本特征、骨架哈希、静态语义分析、动…

uniapp使用wxml-to-canvas开发小程序保存canvas图片

微信小程序官方解决方案:wxml-to-canvas 使用wxml-to-canvas要知道一些前提条件 1、只能画view,text,image 2、每个元素必须要设置宽高 3、默认是flex布局,可以通过flexDirection: "column"来改变排列方式 4、文字 必…

Tomcat 部署

技能目标: 了解 Tomcat 熟悉 Tomcat 多虚拟主机环境 8.1 Tomcat 概述 自 2017 年 11 月编程语言排行榜 Java 占比 13% ,高居榜首, Tomcat 也一度成为 Java 开发人员的首选。其开源、占用系统资源少、跨平台等特性深受广大程序员…

Codeforces Hello 2024 A~F1

A.Wallet Exchange(思维) 题意: Alice和Bob各自拥有 a , b a,b a,b枚硬币,他们决定以Alice为先手开始比赛,比赛中每人在每轮需按顺序执行操作1和操作2: 操作1:交换两人手上拥有的硬币数量,或什么都不做 …