秋招面试—JS篇

2024 JavaScript面试题

1.new 操作符的工作原理

①.创建一个新的空对象

②.将这个对象的原型设置为函数的 prototype 对象

③.让函数的this指向该对象,为函数添加属性和方法

④.最后返回这个对象

2.什么是DOM,什么是BOM?

DOM:文档对象模型,将整个文档看作一个对象,对象中定义了处理网页内容的方法和接口。

BOM:浏览器对象模型,将浏览器看作一个对象,对象中定义了与浏览器进行交互的方法和接口。

🌰常见DOM操作有哪些?

3.对类数组对象的理解,如何转换为数组

有length和若干索引属性的对象,与数组类似,但是不能调用数组的方法。

①通过 call 调用函数的 slice、splice 方法

Array.prototype.slice.call(arrayLike, 0);
Array.prototype.splice.call(arrayLike);

②通过 apply 调用函数的 concat 方法

Array.prototype.concat.apply([], arrayLike);

③通过 Array.isArray()

Array.from(arrayLike);

🌰arguments 干嘛的?

4.对Ajax的理解,如何实现一个Ajax?

通过XMLHttpRequest对象向服务器发送一个异步请求,从服务器拿到数据之后,通过JS操作DOM节点,达到局部刷新的目的。

①首先创建一个XMLHttpRequest对象。

②.open()方法与服务器建立连接,传递请求方式、服务器地址等参数。

③使用onReadystatechange事件,监听服务器端的通信状态。

④最后使用.send()方法发送数据。

🌰服务器端的通信状态有哪些?

5.JS为什么会使用变量提升?导致了什么问题?

JS变量提升的目的时为了①提高性能 和 ②增加容错性;

使用变量提升会导致,函数内部变量提升函数内部最顶部,覆盖了外层作用域中传递进来的变量。

👨‍💻写一下

6.for…in 和 for…of的区别?🤡

for…in 获取键值,遍历整个原型链,返回数组中所有可枚举对象,性能相对较差;

for…of 获取键名,只遍历对象,返回数组下标对应的属性值。

7.JS有哪些数据类型,区别是什么?

原始数据类型:Undefined、Null、Boolean、Number、String;

引用数据类型:数组、对象、函数。

区别在于存储位置不同,原始数据类型占用空间小,大小不固定,存在栈中;引用数据类型占用空间大,大小固定,存在堆中。

BigInt 是一种内置对象,表示任意大的整数,不能与Number一起用,否则就会造成丢失精度的问题,

0.1+0.2=0.3 为什么是 false?

8.数据类型检测方法有哪些?

typeof

instanceof

constructor

Object.prototype.toString.call()

9.判断数组的方式有哪些?

Object.prototype.toString.call()

_ _ proto _ _

Array.isArray()

instanceof()

Array.prototype.idPrototypeof

10.null 和 undefined 的区别?

undefined 是声明了未定义,unll是空对象;

11.typeof null = object 为什么?

这是一个历史遗留问题,JS数据类型的底层是以二进制形式存在的,二进制前三位为0 , typeof 就会判定为Object类型,而 null 的二进制恰好都为0,所以 typeof 会误判 null 为 objec t类型。

12.Object.is() 与 比较操作符 “=”、“”的区别

双等号(==):表示两边数据类型不相等,会对类型进行强转再进行比较;

三等号(===):表示两边数据类型不相等,直接返回false;

Object.is()与三等号类似,但是做了一些特殊处理,比如 +0 与 -0 不相等,两个NaN是相等的。

13.let、const、var的区别

var 存在提升变量,添加全局属性、重复声明变量、改变指针指向等特点;

const 声明必须设置初始值;

let 可以改变指针方向;

const和let 有块级作用域、存在暂时性死区;

14.对闭包的理解

我的理解,闭包就是函数之间的套娃,内层函数可以访问到外层函数的作用域。

如果不是特定任务需要闭包,其他情况下使用闭包对内存和速度的消耗还是蛮大的!

15.对作用域、作用域链的理解

作用域:函数和变量能够被访问到的区域。包含全局作用域、函数作用域、块级作用域。

作用域链:当需要使用到某个变量的时候,JS就回去当前作用域中查找,如果找不到,就会去上层作用域继续查找,直到找到为止,这个查找的过程就是一个作用域链。

16.对执行上下文的理解

是对JS代码远行环境的抽象概念,只要有js代码远行的地方,就一定运行在执行上下文中。

包含全局执行上下文、函数执行上下文、eval函数执行上下文

17.箭头函数(=>)和普通函数(function)有什么区别

①箭头函数更简洁,没有自己的this,继承来的this指向永远不会改变,call、bind、apply也不能改变this指向;

②箭头函数不能做构造函数、generator函数使用;

③没有自己的arguments、prototype;

18.箭头函数的this指向哪里?

指向最后一次调用它的对象、指向最后一次调用它的对象、指向最后一次调用它的对象

19.对原型、原型链的理解

原型:每个构造函数都有自己的prototype属性,这个属性值是个对象,对象中定义了该函数所有实例共享的属性和方法,这些属性和方法就是原型。

原型链:当需要查找对象的某个属性时,如果对象内部没有这个属性,JS就会去原型对象中查找该属性,直到到达根对象null,找的这个过程就是整个原型链。

20.async 和 await 的理解

async 返回一个Promise对象;

await 返回该对象的结果,如果等待的结果不是一个Promise对象,那么就直接返回表达式的结果;如果等待的结果是一个Promise对象,await就会阻塞代码,等待Promise返回value的值,再做await返回结果。

21.async await 对比Promsie的优势

①代码阅读起来更加简洁,Promise虽然摆脱了回调地狱,但是then的链式调用看起来很臃肿;

②async await 错误处理更加友好,调试更加方便;

22.垃圾回收 与 内存泄露

垃圾回收有引用计数和标记删除两种回收机制

标记删除:变量被声明的时候,就会被加上”存在于上下文“的标记,垃圾回收程序远行的时候,被标记的变量就是待删除变量,随后垃圾回收程序会做一次内存清理,清理所有带标记的变量。

引用计数:变量被引用,引用数+1,变量被覆盖,引用数-1,当变量为0的时候,就会被清理掉回收内存。

23.深克隆和浅克隆

24.防抖(debounce)与节流(throttle)

防止抖动,节省流量,防抖执行最后一次,节流执行第一次触发的事件。

防抖:固定时间后触发该事件,在固定时间内重复触发,就会重新计时。相当于一个弹簧

节流:固定时间内运行一次,在固定时间内重复触发,只执行之后一次。相当于不间断的水滴

image-20240130205828231

一种优化高频率执行代码的手段

防抖(throttle): n秒后再执行某一事件,若n秒内被重复触发,重新计时

const button = document.querySelector('input');
// 每次事件触发要执行的任务
function payMoney(){
	console.log('点击付款')
}
// 防抖设置
function debounce(){
    func();
}

// 给按钮添加事件监听
button.addEventListener('click',debounce());

引用场景

​ 防抖:百度搜索框,输入猫咪,等待输入完再搜索

​ 节流:

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

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

相关文章

AI日报:谷歌的“双子时代”:将第二代人工智能嵌入其所做的一切

谷歌强大的大型多模式模式Gemini正在进军搜索、广告、云、Bard等领域。Bard的付费订阅即将到来吗? 文章目录 一览Bard订阅即将到来?一代人工智能进入谷歌广告YouTube正在崛起收入上升但股价下跌 一览 谷歌首席执行官、母公司Alphabet的桑达尔皮查伊表示&…

Kotlin 协程:用源码来理解 ‘viewModelScope‘

Kotlin 协程:用源码来理解 ‘viewModelScope’ Kotlin 协程是 Kotlin 语言的一大特色,它让异步编程变得更简单。在 Android 开发中,我们经常需要在后台线程执行耗时操作,例如网络请求或数据库查询,然后在主线程更新 UI…

VBoxManage 命令行使用

VBoxManage: 序号命令作用1VBoxManage list vms# 查看当前所有虚拟机2VBoxManage list runningvms # 查看当前正在运行的虚拟机3VBoxManage startvm 虚拟机名 --type gui # 启动虚拟机4VBoxManage startvm 虚拟机名 --type headless# 无前端图形界面方式启动虚拟机…

Elasticsearch:构建自定义分析器指南

在本博客中,我们将介绍不同的内置字符过滤器、分词器和分词过滤器,以及如何创建适合我们需求的自定义分析器。更多关于分析器的知识,请详细阅读文章: 开始使用 Elasticsearch (3) Elasticsearch: analyzer…

Debezium发布历史101

原文地址: https://debezium.io/blog/2021/01/07/debezium-1-4-final-released/ 欢迎关注留言,我是收集整理小能手,工具翻译,仅供参考,笔芯笔芯. Debezium 1.4.0.Final 发布 2021 年 1 月 7 日 作者: 克里…

C#中的WebApi响应Accept头,自动返回xml或者json

Global.asax.cs中的Application_Start方法添加 GlobalConfiguration.Configuration.Formatters.Clear(); GlobalConfiguration.Configuration.Formatters.Add(new XmlMediaTypeFormatter()); GlobalConfiguration.Configuration.Formatters.Add(new JsonMediaTypeFormatter())…

工作七年,对消息推送使用的一些经验和总结

前言:不管是APP还是WEB端都离不开消息推送,尤其是APP端,push消息,小信箱消息;WEB端的代办消息等。因在项目中多次使用消息推送且也是很多项目必不可少的组成部分,故此总结下供自己参考。 一、什么是消息推…

Vue.js 中子组件向父组件传值的方法

Vue.js 是一款流行的 JavaScript 前端框架,它提供了一套完整的工具和 API,使得开发者可以更加高效地构建交互式的 Web 应用程序。其中,组件化是 Vue.js 的一个核心概念,通过组件化可以将一个复杂的应用程序拆分成多个独立的部分&a…

3D应用开发平台HOOPS Platforms优化制造流程和数字化转型

Tech Soft 3D公司的HOOPS Platform (包括HOOPS Native Platform 和HOOPS Web Platform),是一种用于开发顶级3D软件的集成技术。具有高性能3D图形,准确,快速的CAD数据转换,3D数据发布以及与流行的建模内核的…

iOS_Xcode_LLDB调试常用命令

文章目录 结构常用命令:1、流程控制:2、常用命令3、进程信息:4、寄存器:register5、镜像:image6、内存:memory7、符号断点:breakpoint8、内存断点:watchpoint9、Tips: 结…

音视频数字化(音频数字化)

在音视频领域,人们始终追求无限还原现场效果,因此音频越逼真越好,视频越清晰越好。之所以我们需要将音视频信号由模拟转为数字,目的是在录制、存储、编辑、复制、回放等环节的不失真,尽量保持原有细节,不因以上操作,导致音画的质量下降。 为此,视频系统分辨率越来越高,…

【iOS ARKit】手动配置环境探头

在上节中我们已经了解了环境探头以及如何使用自动环境探头,这节一起了解如何使用手动配置环境探头。 在使用自动环境反射时,开发人员无须进行有关环境反射的任何操作,只需要设置自动环境反射即可,其余工作完全由 RealityKit 自动完…

ArcGIS Pro字段编号相关代码

字段属于SHP文件的重要组成部分,在某些时候需要对字段进行编号,这里为大家介绍一下字段编号相关的代码,希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载的POI数据,除了POI数据,常见的GIS数据都可…

全面掌握Django的web框架Django Rest_Framework(一)

文章目录 Django Rest_Framework1. DRF介绍2.DRF特点3.环境安装与配置(1)DRF需要以下依赖(2)创建django项目 4.序列化器的使用(1)创建序列化器 5. 反序列化器使用 Django Rest_Framework 1. DRF介绍 Djan…

springboot141夕阳红公寓管理系统的设计与实现

基于Spring Boot的夕阳红公寓管理系统的设计与实现 摘 要 如今社会上各行各业,都在用属于自己专用的软件来进行工作,互联网发展到这个时候,人们已经发现离不开了互联网。互联网的发展,离不开一些新的技术,而新技术的…

【爬虫专区】批量下载PDF (无反爬)

天命:只要没反爬,一切都简单 这次爬取的是绿盟的威胁情报的PDF 先看一下结构,很明显就是一个for循环渲染 burp抓包会发现第二次接口请求 接口请求一次就能获取到了所有的数据 然后一个循环批量下载数据即可,其实没啥难度的 imp…

使用Postman做API自动化测试

Postman最基本的功能用来重放请求,并且配合良好的response格式化工具。 高级点的用法可以使用Postman生成各个语言的脚本,还可以抓包,认证,传输文件。 仅仅做到这些还不能够满足一个系统的开发,或者说过于琐碎&#…

【鸿蒙】大模型对话应用(三):跨Ability跳转页面

Demo介绍 本demo对接阿里云和百度的大模型API,实现一个简单的对话应用。 DecEco Studio版本:DevEco Studio 3.1.1 Release HarmonyOS SDK版本:API9 关键点:ArkTS、ArkUI、UIAbility、网络http请求、列表布局、层叠布局 页面跳…

谷歌seo如何发布外链?

在谷歌SEO中发布外链就像是在网络世界中搭建桥梁,你需要在别人的网站里上精心放置通往你网站的路径,这种路径一般是单向的,可能只使用一次,但这依然是个需要花心思的工作 而对于谷歌seo的外链,很多人都会有一个误解&am…

pnpm : 无法加载文件 D:\tool\nvm\nvm\node_global\pnpm.ps1,因为在此系统上禁止运行脚本

你们好,我是金金金。 场景 新创建的项目,在vscode编辑器终端输入 pnpm i,显示报错如上 解决 在终端输入get-ExecutionPolicy(查看执行策略/权限) 输出Restricted(受限的) 终端再次输入Set-ExecutionPolicy -Scope CurrentUser命令给用户赋予…