Javascript高频面试题

系列文章目录

文章目录

  • 系列文章目录
  • 前言
  • 1.JavaScript常见数据类型
    • null 和 undefind区别
    • symbol(ES6新增)、bigInt(ES10新增)
  • 2.JavaScript判断数据类型的方式
  • 3.== 和 === 区别,分别在什么情况使用?
  • 4.变量声明 var、let、const 的区别
  • 5.作用域
  • 6.作用域链
  • 7.垃圾回收机制
  • 8.闭包
    • 什么是闭包?闭包的作用?闭包引起的问题
  • 9.JS的变量提升
    • var声明的变量声明提升
  • 10.箭头函数
    • 箭头函数的特性
    • 箭头函数和普通函数的区别?
  • 11.构造函数
    • 实例化执行过程(构造函数加了new发生了什么事情)?
  • 12. JavaScript中创建对象的三种方式
  • 13. JavaScript内置引用类型(包装类型)
  • 14.字符串常用方法
  • 15.原型与原型链
    • 原型是什么?
    • 原型链是什么?
    • 小结
  • 16.调用函数
  • 17.递归函数
  • 18. 深浅拷贝
    • 常见拷贝方式:
    • 浅拷贝
    • 深拷贝
  • 深拷贝有几种实现方式?
  • 19.
  • 总结


前言

Javascript 常考面试题。


1.JavaScript常见数据类型

Alt

null 和 undefind区别

(1)使用 typeof 进行判断的时候,Null 类型化会返回 “object”,这是一个历史遗留的问题。
(2)当我们使用双等号()对两种类型的值进行比较时会返回 true,使用全等号(=)时会返回false
(3)与数字相加,undefind返回值为NaN,null返回值为数字。
如何安全获取undefind?void 0 来获得 undefined。

symbol(ES6新增)、bigInt(ES10新增)

(1)symbol作用: 主要用于创建一些唯一标识, 可作为对象的属性名使用, 可通过 Symbol(‘xxx’) 进行声明

(2)bigInt: 用于表示比 Number 大的数值 (-2^53 - 1 到 2^53 - 1), 它声明方式有两种:

  • 字面量形式, 通过在数字后面加 n 来进行表示: const bigint = 123n
  • 通过函数 BigInt 来声明: const
    bigint = BigInt(12312)
  • Symbol BigInt 都不是一个构造函数, 所以 new 关键词的方式来构建实例
  • 创建一个 BigInt 的时候, 参数必须为整数, 否则或报错

2.JavaScript判断数据类型的方式

  • typeof:检测任意变量的数据类型。用typeof检测arguments的类型,返回object。
  • instanceof:判断一个对象的具体类型
  • objict.prototype.toString.call()
  • constructor:引用数据类型

3.== 和 === 区别,分别在什么情况使用?

  • 等于操作符用( == ):如果操作数相等,则会返回 true;在比较中会先进行类型转换,再确定操作数是否相等
  • 全等操作符( === ):只有两个操作数在不转换的前提下相等才返回 true。即类型相同,值也需相同。
  • 区别:== 判断两边值是否相等(存在隐式转换),=== 判断两边值和数据类型是否完全相等。null 和 undefined 比较,相等操作符(==)为true,全等为false

4.变量声明 var、let、const 的区别

(1)var

  • 可以重复声明
  • 没有块作用域
  • 有变量提升

(2)let

  • 不能重复声明
  • 有块作用域
  • 没有有变量提升

(3)const(定义常量时不可被修改)

  • 不能重复声明
  • 有块作用域
  • 没有有变量提升

5.作用域

Alt
5.1 作用域(scope):变量起作用的区域
5.2 局部作用域:

  • 函数作用域:在函数内部声明的变量只能在函数内部被访问,函数外部无法访问。
  • 块作用域:Javascript中使用{ }包裹的代码称代码块,let、const 声明的变量(常量)会产生块作用域,var 不会产生块作用域。
    5.3 全局作用域:

6.作用域链

Alt

7.垃圾回收机制

Alt

8.闭包

什么是闭包?闭包的作用?闭包引起的问题

Alt

9.JS的变量提升

var声明的变量声明提升

Alt## 函数声明提升
Alt

10.箭头函数

箭头函数的特性

  • 编码更简洁
  • 函数作用域内没有自己的this。会从自己作用域链的上一层寻找this
  • 不可以使用new实例化构造函数
  • 箭头函数内部不可以使用arguments对象,该对象在函数体内不存在,若使用该对象用rest参数代替。
    常见使用场景:定义匿名函数、回调函数。

箭头函数和普通函数的区别?

  1. 函数作用域内没有自己的this,从定义它的上下文中继承
  2. 没有 prototype 属性,不能作为构造函数使用

11.构造函数

  1. 作用:初始化对象,快速创建多个类似对象,大写字母开头的函数。
  2. 通过new调用来创建自定义类型的实例对象。
  3. 构造函数内部不写return,返回新创建对象。

实例化执行过程(构造函数加了new发生了什么事情)?

  1. 创建新对象;
  2. 构造函数this指向新对象;
  3. 执行构造函数代码,修改this,添加新属性;
  4. 返回新对象。

12. JavaScript中创建对象的三种方式

  1. 对象字面量
const v = {
    name = '守灯者'
}
  1. new object
const v = new object ({
     name = '守灯者'
})
console.log(v)
  1. 构造函数创建对象

13. JavaScript内置引用类型(包装类型)

  • 引用类型:String、Number、Boolean、Date、RegExp等
  • 基本类型有专门的构造函数,叫基本类型的包装类型,如String类型是基本类型String的包装类型。

为什么字符串类型能够使用length?为什么有属性?

  • 在JS的底层把基本的数据类型包装成了复杂数据类型。

14.字符串常用方法

15.原型与原型链

原型是什么?

一个对象,称 prototype 为原型对象

作用:

  • 共享方法
  • 把不变的方法直接定义在 prototype 对象上
  • prototype:原型对象
  • proto:对象原型,暴露对象的 prototype 特性

原型链是什么?

通__proto__属性链接的多个原型对象
Alt

小结

  • 构造函数和原型对象里面的 this 指向 实例对象
  • 公共的属性写到构造函数里面
  • 公共的方法写到原型对象上面
  • 要确定一个对象是不是另一个对象的原型,可以使用 isPrototypeOf() 方法

16.调用函数

JavaScript中函数可以通过5种方式调用

  • 作为函数
  • 作为方法
  • 作为构造函数
  • 通过 call() 或 apply() 方法简介调用
  • 通过 JavaScript 语言特性隐式调用

17.递归函数

18. 深浅拷贝

常见拷贝方式:

  • 拷贝对象 object assgin() / 展开运算符{ …obj }拷贝对象
  • 拷贝数组 array.prototype.concat 或 [ …arr ]

浅拷贝

  • 浅拷贝 ,拷贝对象之后,里面的属性值是简单数据类型,直接拷贝值。
  • 如果属性值是引用类型,则拷贝的是地址。

直接赋值和浅拷贝有什么区别?

  • 直接赋值,赋值的是地址,修改会影响原对象。浅拷贝是一层的,不会和原对象相互影响。

深拷贝

深拷贝,拷贝的是对象

深拷贝有几种实现方式?

  • 通过递归实现深拷贝
  • 通过 JSON.stringify() 实现
  • 通过JS库 lodash / cloneDeep() 实现

19.



总结

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

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

相关文章

Unity检测AssetBundle是否循环依赖

原理:bundle的依赖关系构建一个二维的矩阵图,如果对角线相互依赖(用1标记)则表示循环依赖。 using PlasticGui; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; public cl…

Redis缓存异常问题,常用解决方案总结

前言 Redis缓存异常问题分别是:1.缓存雪崩。2.缓存预热。3.缓存穿透。4.缓存降级。5.缓存击穿,以 及对应Redis缓存异常问题解决方案。 1.缓存雪崩 1.1、什么是缓存雪崩 如果缓存集中在一段时间内失效,发生大量的缓存穿透,所有…

zabbix6入门到精通(3) 预处理

zabbix6入门到精通(3) 预处理 配置 — 主机 文件系统主项目 vfs.fs.get 测试一下 添加预处理 $[?(.fsname ‘/’)] $[0].inodes.pfree JSONPath参照: https://www.zabbix.com/documentation/6.0/zh/manual/config/items/preprocessi…

【Docker】进阶之路:(十三)Docker Swarm

目录 Docker Swarm架构与概念 Docker Swarm架构 Docker Swarm 相关概念 1.Swarm 2.Node Docker Swarm是Docker官方提供的集群管理工具,它的主要作用是将Docker主机池转变为单个虚拟Docker主机,把若干台Docker主机抽象为一个整体,并且通过…

django实现增删改查分页接口

django实现增删改查分页接口(小白必备) 在上篇文章中我使用nodejs实现了增删改查分页接口,这一篇我们则使用django实现。 1.创建一个django项目,命令如下 python manage.py startapp myapp 2.在你自己的myapp文件夹中的models.py中定义你们自己的模型 f…

java导出word使用模版与自定义联合出击解决复杂表格!

1. 看一下需要导出什么样子的表格 如图所示,这里的所有数据行都是动态的,需要根据查询出来的数据循环展示。 如果只是这样的话,使用freemarker应该都可以搞定,但是他一列中内容相同的单元格,需要合并。 这对于表格样式…

翻译: LLM大语言模型图像生成原理Image generation

文本生成是许多用户正在使用的,也是所有生成式人工智能工具中影响最大的。但生成式人工智能的一部分兴奋点也在于图像生成。目前也开始出现一些可以生成文本或图像的模型,这些有时被称为多模态模型,因为它们可以在多种模式中操作,…

配置android sudio出现的错误

导入demo工程,配置过程参考: AndroidStudio导入项目的正确方式,修改gradle配置 错误:Namespace not specified. Specify a namespace in the module’s build file. 并定位在下图位置: 原因:Android 大括号…

优雅玩转实验室服务器(二)传输文件

使用服务器最重要的肯定是传输文件了,我们不仅需要本地的一些资源上传到服务器,好进行实验,也需要将服务器计算得到的实验结果传输到本地,来进行预览或者报告撰写。 首先,由于涉及到服务器操作,我强烈推荐…

等保2.0的变化

1法律地位得到确认 《中华人民共和国网络安全法》第21条规定“国家实行网络安全等级保护制度”,要求“网络运营者应当按照网络安全等级保护制度要求,履行安全保护义务”;第31条规定“对于国家关键信息基础设施,在网络安全等级保护…

16ASM 汇编基础与Debug使用

目录 硬件运行机制 微机系统硬件组成 计算机系统组成 8086CPU组织结构 DoxBox安装 Debug使用 R命令 D命令 E命令 U命令 T命令 A命令 标志寄存器 常用机器指令 硬件运行机制 下面是一个电子器件二极管,正向加电则通,反向加电则不通 利用二…

MySQL索引_什么是索引_索引的分类_什么时候需要/不需要创建索引_优化索引_索引失效

文章目录 索引1. 什么是索引2. 索引的分类按数据结构分类按物理存储分类按字段特性分类按字段个数分类 3. 什么时候需要 / 不需要创建索引?什么时候适用索引?什么时候不需要创建索引? 4. 优化索引的方法前缀索引优化覆盖索引优化主键索引最好…

spring 笔记一 spring快速入门和配置文件详解

Spring简介 Spring是分层的 Java SE/EE应用full-stack 轻量级开源框架,以 IoC(Inverse Of Control:反转控制)和AOP(Aspect Oriented Programming:面向切面编程)为内核。 提供了展现层SpringMV…

基于PaddleNLP的深度学习对文本自动添加标点符号(一)

前言 目前以深度学习对文本自动添加标点符号研究很少,已知的开源项目并不多,详细的介绍就更少了,但对文本自动添加标点符号又在古文识别语音识别上有重大应用。 基于此,本文开始讲解基于PaddleNLP的深度学习对文本自动添加标点符号…

c语言注册登录+实验室物帐管理系统

实验室物帐管理系统:用户手册 1引言 本用户手册旨在为实验室物帐管理系统的使用提供指导和帮助。该系统旨在实现以下功能:仪器设备条目的输入、仪器设备的借还以及库存情况查询及修改。通过本手册,您将了解到如何正确使用该系统&#xff0c…

2023 Visual Studio Code年度十佳深色主题

2023 Visual Studio Code年度十佳深色主题 Top Ten Dark-styled Themes on Visual Studio Code in 2023 By JacksonML Microsoft Visual Studio Code(以下简称:VS Code)是微软公司开发的一款开放源代码的集成开发环境(IDE), 自问世以来&…

蓝牙在物联网中的应用,相比WIFI和NFC的优势?

蓝牙在物联网中有着广泛的应用,主要包括以下几个方面: 1、智能家居:蓝牙Mesh技术可以用于智能家居设备之间的连接和通信,实现设备的远程控制和管理。例如,通过蓝牙技术可以将智能音箱、智能电视、智能家电等设备连接起…

【深度学习】强化学习(六)基于值函数的学习方法

文章目录 一、强化学习问题1、交互的对象2、强化学习的基本要素3、策略(Policy)4、马尔可夫决策过程5、强化学习的目标函数6、值函数7、深度强化学习 二、基于值函数的学习方法 一、强化学习问题 强化学习的基本任务是通过智能体与环境的交互学习一个策略…

QT 基础篇

目录 QPushButton QT帮助文档 QT 对象树 QPushButton QPushButton是Qt图形界面控件中的一种,看英文的意思,他就是按钮,是最基本的图形控件之一。在我们的最基本的项目中,运行: 是一个空白的窗体,里面什么也没有&am…

亚马逊云科技:向量数据存储在生成式人工智能应用程序中的作用

生成式人工智能深受大众喜爱,并且由于具备回答问题、写故事、创作艺术品甚至生成代码的功能,推动了行业的转变,那么如何才能在自己的企业中充分地利用生成式人工智能等应运而生问题。许多客户已经积累了大量特定领域的数据(财务记…