JavaScript常见面试题(一)

文章目录

  • 1. JavaScript有哪些数据类型,它们的区别?
  • 2.数据类型检测的方式有哪些
  • 3. 判断数组的方式有哪些
  • 4.null和undefined区别
  • 5.typeof null 的结果是什么,为什么?
  • 6.intanceof 操作符的实现原理及实现
  • 7.为什么0.1+0.2 ! == 0.3,如何让其相等
  • 8.isNaN 和 Number.isNaN 函数的区别?
  • 9.==操作符的强制类型转换规则
  • 10.其他值到字符串的转换规则?
  • 11.其他值到数字值的转换规则?
  • 12.其他值到布尔类型的值的转换规则?
  • 13.Object.is() 与比较操作符 "===" “==” 的区别?
  • 14.JavaScript 中如何进行隐式类型转换?
  • 15.let、const、var的区别
  • 16.const对象的属性可以修改吗
  • 17.如果new一个箭头函数的会怎么样
  • 18.箭头函数与普通函数的区别
  • 19.箭头函数的this指向哪⾥?
  • 20.对 rest 参数的理解
  • 21.ES6中模板语法与字符串处理

1. JavaScript有哪些数据类型,它们的区别?

分为简单数据类型和引用数据类型

  • 简单数据类型有:Numer,String,Boolean,Null,Undefined。
  • 引用数据类型:对象,数组,函数。
  • ES6新增Symbol(独一无二且不可变的数据类型),BigInt(表示任意精度格式的整数)。
  • 简单数据类型存储在栈中,引用数据类型存储在堆中。

2.数据类型检测的方式有哪些

  • typeof console.log(typeof ‘str’);
  • instanceof(只能正确判断引用数据类型) console.log(2 instanceof Number);
  • constructor console.log((2).constructor === Number);
  • Object.prototype.toString.call()

3. 判断数组的方式有哪些

  • isArray(Array.isArray(arr) //true)
  • proto (arr.proto === Array.prototype //true)
  • constructor属性(arr.constructor === Array //true)
  • instanceof(arr instanceof Array //true)
  • toString(Object.prototype.toString.call(obj).slice(8, -1) === “Array” //true)
  • isPrototypeof(判断当前对象是否是另一个对象的原型) Array.prototype.isPrototypeOf(obj)

4.null和undefined区别

undefined 代表的含义是变量声明了未定义(未赋值),null 代表的含义是空对象。

  1. null转换为数值为0,undefined转化为数值为NAN。
  2. null通过typeof判断数据类型的输出结果为object,undefined为undefined。
  3. 访问不存在的dom节点,原型链上查找到顶端返回null,给函数传参没有传,访问对象中没有的属性返回undefined

5.typeof null 的结果是什么,为什么?

历史遗留问题,保留了下来。

6.intanceof 操作符的实现原理及实现

  1. 原理:获取对象的_proto__属性,然后沿着对象的原型链向上查找,看构造函数的prototype对象是否出现在对象的原型链上。

7.为什么0.1+0.2 ! == 0.3,如何让其相等

因为 JavaScript 使用 IEEE 754 双精度浮点数来表示数字,这种表示方式无法精确地存储某些十进制小数,从而导致精度问题。
使用 toFixed 或 toPrecision 将浮点数格式化为固定的小数位数,然后再进行比较。

8.isNaN 和 Number.isNaN 函数的区别?

  1. 函数 isNaN 接收参数后,会尝试将这个参数转换为数值,某些非数值的值可以直接转换成数值。任何不能转换为数值的值都会导致这个函数返回true。
    在这里插入图片描述

  2. 函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN。不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。
    在这里插入图片描述

9.==操作符的强制类型转换规则

  1. 如果两个操作数的类型相同(例如都是字符串、数字或布尔值),则直接进行比较。
  2. 如果一个操作数是对象,另一个不是,会尝试将对象转换为原始类型的值,然后再进行比较。
  3. 如果一个操作数是字符串,另一个是数字,则尝试将字符串转换成数字,然后进行比较。
  4. 如果一个操作数是布尔值,另一个是非布尔值,则将布尔值转换成数字(true 转换为 1,false 转换为 0),然后进行比较。
  5. 如果其中一个操作数是 null,另一个是 undefined,则它们相等。
  6. 如果其中一个操作数是 NaN,则返回 false,因为 NaN 不等于任何值,包括它本身。

10.其他值到字符串的转换规则?

  1. Null 和 Undefined 类型 ,null 转换为 “null”,undefined 转换为 “undefined”,
  2. Boolean 类型,true 转换为 “true”,false 转换为 “false”。
  3. Number 类型的值直接转换,不过那些极小和极大的数字会使用指数形式。

11.其他值到数字值的转换规则?

  1. Undefined 类型的值转换为 NaN。
  2. Null 类型的值转换为 0。
  3. Boolean 类型的值,true 转换为 1,false 转换为 0。
  4. String 类型的值转换如同使用 Number() 函数进行转换,如果包含非数字值则转换为 NaN,空字符串为 0。
  5. 对象(包括数组)会首先被转换为相应的基本类型值,如果返回的是非数字的基本类型值,则再遵循以上规则将其强制转换为数字。

12.其他值到布尔类型的值的转换规则?

以下这些是假值: • undefined • null • false • +0、-0 和 NaN • “”
假值的布尔强制类型转换结果为 false。从逻辑上说,假值列表以外的都应该是真值。

13.Object.is() 与比较操作符 "=" “” 的区别?

  • 使用双等号(==)进行相等判断时,如果两边的类型不一致,则会进行强制类型转化后再进行比较。
  • 使用三等号(===)进行相等判断时,如果两边的类型不一致时,不会做强制类型准换,直接返回 false。
  • 使用 Object.is 来进行相等判断时,一般情况下和三等号的判断相同,它处理了一些特殊的情况,比如 -0 和 +0 不再相等,两个 NaN 是相等的。

14.JavaScript 中如何进行隐式类型转换?

  • +操作符的两边有至少一个string类型变量时,两边的变量都会被隐式转换为字符串;其他情况下两边的变量都会被转换为数字。
  • ==操作符两边的值都尽量转成number
  • <和>比较符,如果两边都是字符串,则比较字母表顺序,其他情况下,转换为数字再比较。

15.let、const、var的区别

  • 块作用域由 { }包括,let和const具有块级作用域,var不存在块级作用域。
  • var存在变量提升,let和const不存在变量提升,即在变量只能在声明之后使用,否在会报错。
  • var声明的变量为全局变量,并且会将该变量添加为全局对象的属性,但是let和const不会。
  • var声明变量时,可以重复声明变量,后声明的同名变量会覆盖之前声明的遍历。const和let不允许重复声明变量。
  • 在使用let、const命令声明变量之前,该变量都是不可用的。这在语法上,称为暂时性死区。使用var声明的变量不存在暂时性死区。
    在这里插入图片描述

16.const对象的属性可以修改吗

  • const是用来定义常量的,而且定义的时候必须初始化,且定义后不可以修改。
  • const保证的并不是变量的值不能改动,而是变量指向的那个内存地址不能改动。对于基本类型的数据(数值、字符串、布尔值),其值就保存在变量指向的那个内存地址,对于引用类型的数据(主要是对象和数组)来说,变量指向数据的内存地址,保存的只是一个指针,const只能保证这个指针是固定不变的,至于它指向的数据结构是不是可变的,就完全不能控制了。

17.如果new一个箭头函数的会怎么样

箭头函数是ES6中的提出来的,它没有prototype,也没有自己的this指向,更不可以使用arguments参数,所以不能New一个箭头函数。

18.箭头函数与普通函数的区别

  1. 箭头函数比普通函数更加简洁(如果没有参数,就直接写一个空括号即可,如果只有一个参数,可以省去参数的括号,如果函数体的返回值只有一句,可以省略大括号)
  2. 箭头函数没有自己的this,它只会在自己作用域的上一层继承this
  3. 箭头函数继承来的this指向永远不会改变
  4. call()、apply()、bind()等方法不能改变箭头函数中this的指向
  5. 箭头函数不能作为构造函数使用(不能New)
  6. 箭头函数没有自己的arguments
  7. 箭头函数没有prototype(__proto__是当前对象的原型对象(隐式原型),而prototype是当前构造函数的原型对象(显式原型))

19.箭头函数的this指向哪⾥?

箭头函数不同于传统函数,它其实没有属于⾃⼰的 this,
它所谓的 this 是, 捕获其外层 上下⽂的 this 值作为⾃⼰的 this 值。

20.对 rest 参数的理解

rest参数是一种在函数定义中使用的特殊语法,它允许函数接受任意数量的参数,并将它们收集到一个数组中。

  • 在函数定义中,可以使用…语法来声明rest参数。
  • 通过使用rest参数,我们可以编写更灵活的函数,能够处理不确定数量的参数。

21.ES6中模板语法与字符串处理

  • ES6中的模板语法是一种更方便的字符串处理方式,它允许我们在字符串中插入变量,并且可以跨行书写。通过使用模板语法,我们可以更简洁地拼接字符串并提高代码的可读性。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Go语言】Gin 框架教程

Gin 框架教程 1.第一个 Gin 程序 1.1 Gin 安装 # 执行执行如下操作即可&#xff0c;安装Gin前需要安装Go环境 go get -u -v github.com/gin-gonic/gin # -v&#xff1a;打印出被构建的代码包的名字 # -u&#xff1a;已存在相关的代码包&#xff0c;强行更新代码包及其依赖包…

转让中字头控股集团公司步骤和条件

随着中国经济的不断发展&#xff0c;越来越多的企业开始积极寻求并购和收购机会。其中&#xff0c;国家总局中字头控股集团公司也是一个备受关注的对象。本篇文章将为您详细介绍国家总局中字头控股集团公司的收购流程及要求。详情致电咨询我或者来公司面谈。 中字头公司转让需满…

[DDR4] DDR4 相对 DDR3差异与优势

依公知及经验整理&#xff0c;原创保护&#xff0c;禁止转载。 传送门: 总目录 1 差异总览 出处&#xff1a; https://www.kingston.com.cn/en/memory/ddr4-overview Description 描述DDR3DDR4Advantage 优势电压1.5V1.2V降低内存功耗需求容量512Mb-8Gb4Gb-16Gb更大的 DIMM 容…

AI 定位!GeoSpyAI上传一张图片分析具体位置 不可思议! ! !

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;常见AI大模型部署&#xff1a;点击&#xff01; &#x1f916;Ollama部署LLM专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年6月16日12点23分 &#x1f004;️文章质量&#xff1a;94分…

快速UDP网络连接之QUIC协议介绍

文章目录 一、QUIC协议历史1.1 问题&#xff1a;QUIC为什么在应用层实现1.2 QUIC协议相关术语1.3 QUIC和TCP对比1.4 QUIC报文格式1.4.1 QUIC报文格式-Stream帧11.4.2 QUIC报文格式-Stream帧2 二、QUIC的特点2.1 连接建立低时延&#xff0c;2.2 多路复用流复用-HTTP1.1流复用-HT…

【OS基础】符合AUTOSAR标准的RTAOS-Alarms详解

目录 前言 正文 7.报警Alarms 7.1配置Alarms 7.1.1激活一个任务 7.1.2 设置一个事件 7.1.3报警回调Alarm Callback 7.1.4 增加计数器值 7.2设置Alarms 7.2.1 绝对Alarms 7.2.2 相对Alarm 7.3自启动Alarms 7.4 删除Alarms 7.5确认何时会发生Alarm 7.6非周期Alarm…

EMQX集群搭建

1. 什么是 MQTT&#xff1f; MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级、基于发布-订阅模式的消息传输协议&#xff0c;适用于资源受限的设备和低带宽、高延迟或不稳定的网络环境。它在物联网应用中广受欢迎&#xff0c;能够实现传感器、…

DETR实现目标检测(一)-训练自己的数据集

1、DETR架构 DETR&#xff08;Detection Transformer&#xff09;是一种新型的目标检测模型&#xff0c;由Facebook AI Research (FAIR) 在2020年提出。DETR的核心思想是将目标检测任务视为一个直接的集合预测问题&#xff0c;而不是传统的两步或多步预测问题。这种方法的创新…

FPGA IO_BANK、IO_STANDARD

描述 Xilinx 7系列FPGA和UltraScale体系结构提供了高性能&#xff08;HP&#xff09;和 高范围&#xff08;HR&#xff09;I/O组。I/O库是I/O块&#xff08;IOB&#xff09;的集合&#xff0c;具有可配置的 SelectIO驱动程序和接收器&#xff0c;支持多种标准接口 单端和差分。…

vxe-table表格新增节点

做前端的朋友可以参考下&#xff1a;也可结合实际需求查看相应的官方文档 效果图 附上完整代码 <template><div><vxe-toolbar ref"toolbarRef" :refresh"{queryMethod: searchMethod}" export print custom><template #buttons>&…

React写一个 Modal组件

吐槽一波 最近公司的项目终于度过了混乱的前期开发&#xff0c;现在开始有了喘息时间可以进行"规范"的处理了。 组件的处理&#xff0c;永远是前端的第一大任务&#xff0c;尤其是在我们的ui库并不怎么可靠的情况下&#xff0c;各个组件的封装都很重要&#xff0c;而…

minium小程序自动化

一、安装minium pip install minium二、新建config.json {"dev_tool_path": "D:\\Program Files (x86)\\Tencent\\微信web开发者工具\\cli.bat","project_path": "小程序项目路径" }三、编写脚本 import miniumclass FirstTest(min…

【Echarts系列】平滑折线面积图

【Echarts系列】平滑折线面积图 序示例数据格式代码 序 为了节省后续开发学习成本&#xff0c;这个系列将记录我工作所用到的一些echarts图表。 示例 平滑折线面积图如图所示&#xff1a; 数据格式 data [{name: 2020年,value: 150},{name: 2021年,value: 168},{name: 2…

设计模式-装饰器模式Decorator(结构型)

装饰器模式(Decorator) 装饰器模式是一种结构模式&#xff0c;通过装饰器模式可以在不改变原有类结构的情况下向一个新对象添加新功能&#xff0c;是现有类的包装。 图解 角色 抽象组件&#xff1a;定义组件的抽象方法具体组件&#xff1a;实现组件的抽象方法抽象装饰器&…

git的ssh安装,windows通过rsa生成密钥认证问题解决

1 windows下载 官网下载可能出现下载太慢的情况&#xff0c;Git官网下载地址为&#xff1a;官网&#xff0c;推荐官网下载&#xff0c;如无法下载&#xff0c;可移步至CSDN&#xff0c;csdn下载地址&#xff1a;https://download.csdn.net/download/m0_46309087/12428308 2 Gi…

【Linux】程序地址空间之动态库的加载

我们先进行一个整体轮廓的了解&#xff0c;随后在深入理解细节。 在动态库加载之前还要说一下程序的加载&#xff0c;因为理解了程序的加载对动态库会有更深的理解。 轮廓&#xff1a; 首先&#xff0c;不管是程序还是动态库刚开始都是在磁盘中的&#xff0c;想要执行对应的可…

PHP在线生成查询产品防伪证书系统源码

源码介绍 PHP在线生成查询产品防伪证书系统源码&#xff0c;源码自带90套授权证书模板&#xff0c;带PSD公章模板&#xff0c;证书PSD源文件。 环境要求&#xff1a;PHPMYSQL&#xff0c;PHP 版本请使用PHP5.1 ~5.3。 图片截图 源码安装说明 1.上传所有文件至你的空间服务器…

学会python——显示进度条(python实例五)

目录 1、认识Python 2、环境与工具 2.1 python环境 2.2 Visual Studio Code编译 3、进度条显示 3.1 代码构思 3.2 代码示例 3.3 运行结果 4、总结 1、认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读…

从零到爆款:用ChatGPT写出让人停不下来的短视频文案

一、前言 在自媒体的浪潮中&#xff0c;精彩的短视频文案对内容传播至关重要。众多辅助工具之中&#xff0c;凭借强大的语言处理能力和广泛的应用场景&#xff0c;ChatGPT成为了内容创作者的重要助力。接下来&#xff0c;我将介绍如何借助ChatGPT编写引人入胜的短视频文案&…

积木搭建游戏-第13届蓝桥杯省赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第83讲。 积木搭建游戏&…