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

这篇具有很好参考价值的文章主要介绍了【图解面试】JS系列 - 如何回答数据类型相关问题(上)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

  • 知识点大纲
    【图解面试】JS系列 - 如何回答数据类型相关问题(上),图解面试,javascript,面试,前端

  • 语言组织(示例)

要点:数量 → 种类 → 区别

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

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

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

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

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

  • 知识点大纲

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

  • 语言组织(示例)

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

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

如果判断一个基础数据类型可以采用 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,那你在日常开发中有使用过么?

  • 知识点大纲
    【图解面试】JS系列 - 如何回答数据类型相关问题(上),图解面试,javascript,面试,前端

  • 语言组织(示例)

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

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

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

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

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

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

  • 知识点大纲
    【图解面试】JS系列 - 如何回答数据类型相关问题(上),图解面试,javascript,面试,前端

  • 语言组织(示例)

从 遵循的标准 → 标准导致的问题 → 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

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

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

  • 知识点大纲
    【图解面试】JS系列 - 如何回答数据类型相关问题(上),图解面试,javascript,面试,前端

  • 语言组织(示例)

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

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

创建数组类的主要有: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文章来源地址https://www.toymoban.com/news/detail-792159.html

到了这里,关于【图解面试】JS系列 - 如何回答数据类型相关问题(上)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 面试时如何回答接口测试怎么进行

    一、什么是接口测试 接口测试顾名思义就是对测试系统组件间接口的一种测试,接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。 二、为什么要做接口

    2024年02月12日
    浏览(39)
  • 经常被问道的这些类,佬们能够回答面试官嘛(适合秋招和小白系列)?

    前言: 本篇文章主要讲解 Java中的几个类常被问到的面试题 相关知识。该专栏比较适合刚入坑Java的小白以及准备秋招的大佬阅读。 如果文章有什么需要改进的地方欢迎大佬提出,对大佬有帮助希望可以支持下哦~ 小威在此先感谢各位小伙伴儿了😁 以下正文开始 首先我们介

    2024年02月09日
    浏览(38)
  • LangChain Demo | 如何调用stackoverflow并结合ReAct回答代码相关问题

    楼主决定提升与LLM交互的质量,之前是直接prompt-answer的范式,现在我希望能用上ReAct策略和能够检索StackOverflow,让同一款LLM发挥出更大的作用。 1. 怎样调用StackOverflow step1 pip install stackspi step 2 注:stackoverflow是stackexchange的子网站  2. 交互次数太多token输入超出了llm限制 appro

    2024年04月09日
    浏览(40)
  • 【线程池】面试被问到线程池参数如何配置时该如何回答

           前言         没有基于业务场景,直接抛出这个问题,等同于耍流氓。         八股文告诉我们CPU密集型就 核心数+1 ,IO密集型就 核心数*2 ,那么真实业务中该怎么去配置呢。         方法论还是有的         1.需要分析线程池执行的任务的特性: CPU 密集型

    2024年02月09日
    浏览(47)
  • 软件测试工程师面试如何回答测试工作有什么优势和劣势

    软件测试工程师面试的时候,会遇到很多很奇葩的问题,例如今天要讲的这个问题就是很奇葩:测试工作有什么优势和劣势? 我们做软件测试工作的,为了能够把软件中的明显的缺陷找出来,要读几十遍需求文档,跟开发和产品使劲的沟通,有时候还要拿着竞争对手的产品分

    2024年02月02日
    浏览(65)
  • js中如何判断一个变量的数据类型?

    前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发者,这里都将为你提供一个系统而又亲切的学习平台。在这个

    2024年02月09日
    浏览(41)
  • 如何对JS 中的数据类型进行检测

    typeof操作符可以用来检测一个值的数据类型,返回一个表示数据类型的字符串。 console.log(typeof null); // object(注意这是一个历史遗留问题,null被错误地判断为\\\"object\\\") 原因 : 当JavaScript在内部判断一个值的类型时,会使用一个表示类型的标记位。在表示对象的标记位中,nu

    2024年02月11日
    浏览(35)
  • 消息中间件之八股面试回答篇:一、问题概览+MQ的应用场景+RabbitMQ如何保证消息不丢失(生产者确认机制、持久化、消费者确认机制)+回答模板

    目前主流的消息队列技术(MQ技术)分为RabbitMQ和Kafka,其中深蓝色为只要是MQ,一般都会问到的问题。浅蓝色是针对RabbitMQ的特性的问题。蓝紫色为针对Kafka的特性的问题。 MQ主要提供的功能为:异步 解耦 削峰 。 展开来讲就是 异步发送(验证码、短信、邮件…) MYSQL和Redi

    2024年01月24日
    浏览(61)
  • 【SQL开发实战技巧】系列(二十):数据仓库中时间类型操作(进阶)获取季度开始结束时间以及如何统计非连续性时间的数据

    【SQL开发实战技巧】系列(一):关于SQL不得不说的那些事 【SQL开发实战技巧】系列(二):简单单表查询 【SQL开发实战技巧】系列(三):SQL排序的那些事 【SQL开发实战技巧】系列(四):从执行计划讨论UNION ALL与空字符串UNION与OR的使用注意事项 【SQL开发实战技巧】系列

    2024年02月02日
    浏览(72)
  • 以太网帧、IP数据报的图解格式(包含相关例题讲解,一题足够)

    目录 一、基础知识 1.1、UDP段、IP数据报,以太网帧图示 1.2、以太网帧图示 1.3、IP数据报图示 二、例题讲解 1.1 题目及答案 1.2、答案解析 通信过程中,每层协议都要加上一个数据首部(header),称为封装(Encapsulation),如下图所示。 不同的协议层对数据包有不同的称谓,在

    2024年02月05日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包