【javaScript面试题】2023前端最新版javaScript模块,高频24问

1d43f75f092a4050a8ce31e2d85f6868.gif

🥳博       主:初映CY的前说(前端领域)

🌞个人信条:想要变成得到,中间还有做到!

🤘本文核心:博主收集的关于javaScript的面试题

目录

一、2023javaScript面试题精选

1.js的数据类型

2.双等和三等的区别

3.js中布尔值为false的六种情况

4.let const var 区别

5.普通函数和箭头函数的区别

6.数组有哪些方法

7.map()对比forEach()

8.for in 对比 for of区别

9.扁平化数组代码实现

10.数组去重的方法

11.防抖和节流

12.事件循环机制

13.原型与原型链

14.localStorage、sessionStorage、cookie区别

15.判断数据类型的方式以及区别  (typeof instanceof  他们两者的区别)

16.null typeof为什么是一个object

17.事件冒泡与事件捕获原理

18.父div和子div都绑定了click事件,点击子div触发事件,这个事件的回调顺序

19.阻止冒泡的方式及作用

20.事件委托的理解

21.call、apply、bind的区别

22.js闭包

23.内存泄漏怎么理解

24.哪些操作会造成内存泄露


一、2023javaScript面试题精选

1.js的数据类型

数据类型分为两种:基本数据类型与引用数据类型。基本数据类型有:number、string、boolean、null、undefined。引用数据类型有:array、function等(除了基本数据类型都是引用数据类型)

 基本数据类型的主要特点是赋值方式是传值,并且值存在栈中。

引用数据类型的主要特点是赋值方式是传址,并且值存在堆中。


2.双等和三等的区别

双等主要是值类型进行比较,三等是值类型与数据类型进行双层比较。

简单来说就是三等因为传递的是地址,因此我们需要先对比数据类型,再看地址内部存储的数据是否相等。而双等仅仅是看值是否相等,值相等即可无需比较类型。


3.js中布尔值为false的六种情况

  1. undefined(未定义找不到值时出现)、
  2. null(代表空值)
  3. NaN(无法计算时候出现表示非数值,typeof(NaN)是number类型)
  4. false(布尔值的false,注意:‘false’的布尔值为true(''这是字符串))
  5. 0(数字)
  6. ‘’或者""(单双引号,注意中间有空格是true)

因此我举个例子:true+true=2

0e21140f962c49b1b6d14ffe5212faea.png

4.let const var 区别

var:存在变量提升,可以先去声明再去使用,一个变量可多次声明,后面的声明会覆盖前面的声明

45469c1f7ef14027b1984b1adddb348c.png

 const:const声明一个只读的变量,声明后,值就不能改变(引用类型地址不变即可值可改变)

02104d0cc486427789ad76c2eaed6f90.png

let:不存在变量提升,let声明变量前,该变量不能使用

8ad07a9a7b01454f9df9978f27f5ad18.png


5.普通函数和箭头函数的区别

写法不同。箭头函数更加专注于结果写法由于()=>{}构成,写法简洁

this指向不同。箭头函数中 this 的指向不同:在普通函数中,this 总是指向调用它的对象,如果用作构造函数,它指向创建的对象实例。箭头函数中没有this,箭头函数的this指向取决于外层作用域中的this,外层作用域或函数的this指向谁,箭头函数中的this便指向谁。

6.数组有哪些方法

大家可以看看这一篇文章:http://t.csdn.cn/v6Zqu

 数组的增删改查操作:

push()、unshift、shift()、pop()、splice()、join()、reverse()

数组的遍历操作:

map()、filter()、some()、every()、findindex()、reduce()


7.map()对比forEach()

1.map有返回值,可以开辟新空间,return出来一个length和原数组一致的数组,即便数组元素是undefined或者是null。
2.forEach默认无返回值,返回结果为undefined,可以通过在函数体内部使用索引修改数组元素。
3.map的处理速度比forEach快,而且返回一个新的数组,方便链式调用其他数组新方法


8.for in 对比 for of区别

简单来说就是它们两者都可以用于遍历,不过for in遍历的是数组的索引(index),而for of遍历的是数组元素值(item)

a1b985d5054c44a2baa8deef1fa7e469.png

9.扁平化数组代码实现

①使用isArray()(检测是否是数组)配合concat()(合并数组)实现

②使用reduce配合isArrayy于concat遍历实现

③利用展开运算符的妙用

该三种方法的是来源于http://t.csdn.cn/s3CxR,博主:从人到猿

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><script>
// isArray判断是不是数组
const a = [1, [2, [3, [4, 5]]]];
//   const flatten = (arr) => {
//     let result = [];
//     for (let i = 0; i < arr.length; i++) {
//       if (Array.isArray(arr[i])) {
//         result = result.concat(flatten(arr[i]));
//       } else {
//         result.push(arr[i]);
//       }
//     }
//     return result;
//   };
//   console.log(flatten(a));// concat连接两个数组
// var sedan = ["S60", "S90"];
// var SUV = ["XC40", "XC60", "XC90"];// var Volvo = sedan.concat(SUV);//['S60', 'S90', 'XC40', 'XC60', 'XC90']
// console.log(Volvo)// const flatten = (arr) => {
//     return arr.reduce((prev,next)=>{
//       return prev.concat(Array.isArray(next)?flatten(next):next)
//     },[]);
//   };
//   console.log(flatten(a));console.log(...a,'a');
//展开运算符配合concat
const flatten = (arr) => {while(arr.some(item=>Array.isArray(item))){arr = [].concat(...arr);}return arr;};console.log(flatten(a));</script>
</body>
</html>

10.数组去重的方法

 该三种方法的是来源于https://blog.csdn.net/xingyu_qie,博主:经海路大白狗

 1.利用新旧数组遍历对比法

arr=[1,5,1,3,5,4,3,9,8]let newArr = [];/*   indexOf用于查找数组元素第一次出现的位置,没找到则返回值为-1,参数有两个,第一个为元素项目,参数二(可选)需要查找的位置,负数从-1往前面加 */
for (let i=0;i<arr.length;i++) {if (newArr.indexOf(arr[i]) === -1) {newArr.push(arr[i]);}}
console.log(newArr);//[1, 5, 3, 4, 9, 8]

2.利用新语法 new Set()

arr=[1,5,1,3,5,4,3,9,8]
let mySet = new Set(arr); // 非重复的类数组
console.log(mySet,'mySet');//{{1, 5, 3, 4, 9,8}
// let newArr = Array.from(mySet); // set转数组
let newArr = [...mySet]; // 或者是这种解构方法
console.log(newArr);//[1, 5, 3, 4, 9, 8]

3.filter与indexOf结合

/* 这个过滤就很巧妙,利用索引与每一项出现的首次位置(indexOf作用)进行对比,当符合条件的时候返回出去*/ 
arr=[1,5,1,3,5,4,3,9,8]
var newArr = arr.filter((item, index) => {return arr.indexOf(item) === index;
})
console.log(newArr);//[1, 5, 3, 4, 9, 8]

4.includes()的妙用

arr=[1,5,1,3,5,4,3,9,8]
let newArr = [];
for (let i=0;i<arr.length;i++) {if (!newArr.includes(arr[i])) {newArr.push(arr[i]);}
}
console.log(newArr);//[1, 5, 3, 4, 9, 8]

5.利用对象属性来进行判断

arr=[1,5,1,3,5,4,3,9,8]
let obj = {}; // 对象的key值是唯一的
let newArr = [];
for (let i=0;i<arr.length;i++) {if (!obj[arr[i]]) {obj[arr[i]] = arr[i];}
}
console.log(obj)//{1: 1, 3: 3, 4: 4, 5: 5, 8: 8, 9: 9}

0708a7f7a2554f34bfcd91c963ba7ad3.png


11.防抖和节流

本知识点来源:http://t.csdn.cn/dwVOq,博主:留着鼻涕敲代码

防抖:多次触发只执行最后一次

应用场景:search搜索时,用户在不断输入值时,用防抖来节约请求资源

节流:规定时间内 只触发一次

应用场景:

1.鼠标不断点击触发,mousedown(单位时间内只触发一次)
2.监听滚动事件,比如是否滑到底部自动加载更多,用throttle来判断

12.事件循环机制

事件循环理论先执行同步任务,再去执行我们的异步任务(先执行微任务再执行宏任务)。

异步任务进一步划分分为:

宏任务:script标签、setTimeout()、setInterval

微任务:Promise.then、nextTick

13.原型与原型链

  • 原型是我们创建函数的时候,系统帮我们自动生成的一个对象。 主要作用是解决构造函数内部方法内存资源浪费问题。在开发中我们一般把实例对象一些通用的方法放入原型中,在 vue 里面有时候也会给 vue 的原型添加一些公共类方法来实现所有的组件中可以共享成员。像一些常见的$router和$store 都是挂载到 vue 的原型上的。

  • 原型链是 js 对象一种查找机制,遵循就近原则。当我们访问一个对象中的成员的时候,会优先访问自己的,如果自己没有就访问原型的,如果原型也没有就会访问原型的原型,直到原型链的终点 null. 如果还没有,此时属性就会获取 undefined,方法就会报错 xxx is not a function。一般原型链主要是用来实现面向对象继承的。


14.localStorage、sessionStorage、cookie区别

共同点:都是保存在浏览器端

区别:l

①ocalStorage、sessionStorage不会自动把数据发送给服务器仅在本地存储

②cookie数据有路径(path)概念,可以固定存储到某个路径下

③cookie每次http请求都会携带,因此cookie只适合存储小数据,最大为4K左右,其他两者为5M

④有效期不同:cookie与localStorage都在过期前有效,但是sessionStorage在关闭的时候失效

⑤localStorage、cookie在同源窗口下共享数据,sessionStorage不在不同窗口下共享


15.判断数据类型的方式以及区别  (typeof instanceof  他们两者的区别)

1.typeof:一般判断基本数据类型

2.instanceof :一般判断引用类型数据,主要的作用就是判断一个实例是否属于某种类型,或者判断一个实例是否有它的原型。


16.null typeof为什么是一个object

因为在javaScript中,不同的对象都是使用二进制存储的,如果二进制前三位都是0的话,系统会判断为是Object类型,而null的二进制全是0,自然也就判断为Object


17.事件冒泡与事件捕获原理

事件捕获:触及的事件从文档根节点(Document 对象)流向目标节点,途中会经过目标节点的各个节点,并在这些节点上触发捕获事件,直至到达事件的目标节点。是由外到内层

事件冒泡:与事件捕获相反,事件会从目标节点流向文档根节点,途中会经过目标节点的各个父级节点,并在这些节点上触发捕获事件,直至到达文档的根节点。由内到外

a993fb0955aa4de482da1abd86f168d1.png


18.父div和子div都绑定了click事件,点击子div触发事件,这个事件的回调顺序

该原理同上,默认是事件冒泡,先触发子元素再往它的上级触发


19.阻止冒泡的方式及作用

使用  e.stopPropagation()来阻止事件冒泡。作用当然是阻止我们触发它上级的事件啦

74893300a3e84867ab278c60e5546169.png


20.事件委托的理解

js事件代理是把事件处理任务添加到上一级的元素中,这样就避免了把事件添加到多个子集元素上,底层原理是利用了事件冒泡机制

优点:

  • 减少注册时间,节约内存
  • 在table上代理所有td的click事件
  • 在ul上代理所有的click事件
  • 简化dom节点更新,相应事件的更新
  • 不需要在新添加的li上绑定click事件
  • 当删除某个li的时候不需要移除绑定在上面的click事件

缺点:

  • 对于不冒泡的事件不给予支持
  • 层级太多肯能会被中间的某层阻止掉
  • 理论上会导致浏览器会频繁的调用处理函数,虽然可能不需要处理

21.call、apply、bind的区别

 本知识点来源:http://t.csdn.cn/3UPti,博主:dream_reason

共同点:

  • 都是用来改变函数的this对象的指向的
  • 第一个参数都是this要指向的对象
  • 都可以参加后续参数传参

不同点:

  • bind是返回对应函数,便于稍后调用;apply、call则是立即调用
  • apply和call功能一样,只是传入的参数列表形式不同,call 需要把参数按顺序传递进去,而 apply 则是把参数放在数组、伪数组里。

22.js闭包

一个作用域可以访问另外一个函数内部的局部变量,或者说一个函数(子函数)访问另一个函数(父函数)中的变量。此时就有闭包产生,那么这个变量所在的函数我们就称之为闭包函数。

优缺点:闭包的主要作用是延伸了变量的作用范围,因为闭包函数中的局部变量不会等着闭包函数执行完成就销毁,因为还有别的函数需要调用它,只有等这所有的函数都调用完了它才会被销毁。

如何解决:用完之后手动释放。


23.内存泄漏怎么理解

内存泄漏指的是我们用动态存储分配的函数来开辟空间,但是在使用完了没有释放,结果就一直占据该内存单元,直到程序结束。简而言之就是用完了还没回收这就是内存泄漏。


24.哪些操作会造成内存泄露

  • 我们的setTimeout第一个参数是字符串而不是函数的时候
  • 闭包、控制台日志、循环(在两个对象彼此引用且彼此保留的时候就会产生循环)
  • 一个对象的引用数量为0,或者唯一作用就是循环引用(开辟空间没有用上)

至此本文结束,如对您有帮助请务必关注博主呦,万分感谢!!!

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

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

相关文章

如何用Python编写简单的网络爬虫(页面代码简单分析过程)

一、什么是网络爬虫 在当今信息爆炸的时代&#xff0c;网络上蕴藏着大量宝贵的信息&#xff0c;如何高效地从中获取所需信息成为了一个重要课题。网络爬虫&#xff08;Web crawler&#xff09;作为一种自动化工具&#xff0c;可以帮助我们实现这一目标&#xff0c;用于数据分析…

注解式 WebSocket - 构建 群聊、单聊 系统

目录 前言 注解式 WebSocket 构建聊天系统 群聊系统&#xff08;基本框架&#xff09; 群聊系统&#xff08;添加昵称&#xff09; 单聊系统 WebSocket 作用域下无法注入 Spring Bean 对象&#xff1f; 考虑离线消息 前言 很久之前&#xff0c;咱们聊过 WebSocket 编程式…

Android 属性动画及自定义3D旋转动画

Android 动画框架 其中包括&#xff0c;帧动画、视图动画&#xff08;补间动画&#xff09;、属性动画。 在Android3.0之前&#xff0c;视图动画一家独大&#xff0c;之后属性动画框架被推出。属性动画框架&#xff0c;基本可以实现所有的视图动画效果。 视图动画的效率较高…

新品攻略—小功率、小体积、高效率!LED驱动模块RSC6218A

瑞森半导体&#xff08;REASUNOS&#xff09;推出应用在5W-18W LED电源上的LED驱动模块RSC6218A。 LED驱动模块RSC6218A是一款LLC 谐振拓扑功率模块&#xff0c;带有半桥驱动的控制电路和功率转化器件&#xff0c;适用于 LED 恒流控制线路&#xff0c;电路工作频率可达200KHz。…

MicroPython with LVGL

官方博客:Micropython LittlevGL | LVGL’s Blog github:GitHub - lvgl/lv_micropython: Micropython bindings to LVGL for Embedded devices, Unix and JavaScript 官方在线模拟器:https://sim.lvgl.io/(需要电脑能访问外网才能使用) 电脑不能访问外网会出现以下错误&…

GlusterFS分布式存储

目录 前言 一、GlusterFS分布式存储概述 1、GFS概念 2、GFS特点 3、GFS术语 4、GFS构成 5、GFS工作流程 6、后端存储如何定位文件 7、GlusterFs的卷类型 7.1 Distributed Volume&#xff08;分布式卷&#xff09; 7.2 Striped Volume&#xff08;条带卷&#xff09…

vue通过echarts实现数据可视化

1、安装echarts cnpm install echarts -Sechart官方图表示例大全&#xff1a;https://echarts.apache.org/examples/zh/index.html#chart-type-line 2、代码实现 <template><div><div class"box" ref"zhu"></div><div class&…

无线游戏手柄的测试(Windows11系统手柄调试方法)

实物 1、把游戏手柄的无线接收器插入到电脑usb接口中 2、【控制面板】----【查看设备和打印机】 3、【蓝牙和其它设备】--【更多设备和打印机设置】 4、鼠标右键【游戏控制器设置】 5、【属性】 6、【测试】&#xff08;每个按键是否正常&#xff09; 7、【校准】&#xff08;…

NLP在搜索召回领域中的应用场景

自然语言处理&#xff08;NLP&#xff09;在搜索召回领域中的应用场景非常广泛&#xff0c;它通过理解和分析人类语言&#xff0c;提高了信息检索的准确性和效率。以下是一些具体的应用场景&#xff1a; 1. 搜索引擎优化 NLP技术可以用于优化搜索引擎的查询处理&#xff0c;通…

顺序表(增删减改)+通讯录项目(数据结构)

什么是顺序表 顺序表和数组的区别 顺序表本质就是数组 结构体初阶进阶 系统化的学习-CSDN博客 简单解释一下&#xff0c;就像大家去吃饭&#xff0c;然后左边是苍蝇馆子&#xff0c;右边是修饰过的苍蝇馆子&#xff0c;但是那个好看的苍蝇馆子一看&#xff0c;这不行啊&a…

【技术干货】集成电路之模拟芯片中的电源管理

在日常生活中&#xff0c;人们对电子设备的依赖越来越严重&#xff0c;电子技术的更新换代&#xff0c;同时意味着人们对电源技术的发展寄予厚望&#xff0c;今天就带大家认识一下电源管理芯片。 随着整个电子产业链的芯片短缺以及我国5G商用的推进&#xff0c;国产化趋势日益增…

网络学习学习笔记

NETEBASE学习笔记 一.VRP系统1.四种视图模式2.基础命令 二.TCP/IP1.五层模型 一.VRP系统 1.四种视图模式 (1)< Huawei > 用户视图 【查看运行状态】 (2)[Huawei] 系统视图 【配置设备的系统参数】 system-view /sys 进入系统视图 CtrlZ/return 直接返回用户视图 (3)[Hua…

Python+Django+Html河道垃圾识别网页系统

程序示例精选 PythonDjangoHtml河道垃圾识别网页系统 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《PythonDjangoHtml河道垃圾识别网页系统》编写代码&#xff0c;代码整洁&#xff0c;规…

视帝餐厅生意亮红灯?50岁前TVB「电波少女」帮衬撑留港消费

现年50岁的前「电波少女」成员姚乐怡&#xff0c;2012年与商人吴俊匡结婚&#xff0c;2015年诞下一女吴芊憧&#xff08;Gaibe、乳名小鸡髀&#xff09;后淡出幕前&#xff0c;今积极拍片转型做「美食网红」。近年不时介绍香港地道美食&#xff0c;近日更以行动支持留港消费&am…

113.PyQt5_QtPrintSupport_打印操作

我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448; 入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448; 虚 拟 环 境 搭 建 &#xff1a;&#x1f449;&…

docker搭建EFK

目录 elasticsearch1.创建网络2.拉取镜像3.创建容器如果出现启动失败&#xff0c;提示目录挂载失败&#xff0c;可以考虑如下措施 开放防火墙端口4.验证安装成功重置es密码关闭https连接创建kibana用户创建新账户给账户授权 kibana1.创建容器2.验证安装成功3.es为kibana创建用户…

ZYNQ之嵌入式开发02——LED实验

文章目录 通过GPIO控制LED状态通过按键控制LED状态通过EMIO复用PL端按键控制PS端LED状态通过EMIO复用多个PL端的GPIO GPIO(General Purpose Input Output)是一个外设&#xff0c;用来对器件的引脚做观测(输入)和控制(输出)。每个GPIO口都是独立且可以进行动态的编程的&#xff…

mybatis-plus与mybatis同时使用别名问题

在整合mybatis和mybatis-plus的时候发现一个小坑&#xff0c;单独使用mybatis&#xff0c;配置别名如下&#xff1a; #配置映射文件中指定的实体类的别名 mybatis.type-aliases-packagecom.jk.entity XML映射文件如下&#xff1a; <update id"update" paramete…

X服务器远程连接问题解决:Bad displayname ““‘或Missing X server or $DISPLAY

X服务器远程连接问题 报错1 ImportError: this platform is not supported: (failed to acquire X connection: Bad displayname "", DisplayNameError()) Try one of the following resolutions: * Please make surethat you have an X server running, and that …

Vue2 —— 学习(四)

一、收集表单数据 &#xff08;一&#xff09;介绍 前面其实已经 学过了 v-model 双向绑定事件&#xff0c;能获取到表单中的内容到 vm 实例对象中 但是前面只是收集文本框&#xff0c;下面学习一下 各种类型表单数据收集 &#xff08;单/多 选&#xff0c;下拉框&#xff0…