前端人必看的JS面试题汇总

news2025/1/26 15:46:59

面试是每一个前端人在求职过程中都需要面对的事情。在面试过程中,面试官没有办法通过实践操作去了解应聘者的技能水平,所以他们更多地会通过“八股文”的考察来判断你是否符合公司的招聘要求。所以作为一个前端人,在掌握好前端技能的同时,也需要掌握好一些基础理论知识,这样才能在面试中脱颖而出,拿到自己心仪的offer。

 

那么,下面小职就整理了一些在前端面试过程中比较常见的JS面试题,有需要的朋友可以看一下哦~

一、JS数据类型

JS数据类型通常分为基本数据类型和引用数据类型两种。

基本数据类型:Number、String、Boolean、Null、Undefined、Symbol、bigInt七种,

引用数据类型:object、Array、Date、Function、RegExp。

二、JS变量和函数声明的提升

1、在JS中变量和函数的声明会提升到最顶部执行。

2、函数的提升高于变量的提升,

3、函数内部如果用 var 声明了相同名称的外部变量,函数将不再向上寻找。

4、匿名函数不会提升。

三、== 和 ===的区别

== 和 ===都是判断等式两边是否相等,但是==是非严格意义上的相等,值相等就相等,而===是严格意义上的相等,会比较两边的数据类型和值大小,值和引用地址都相等才相等

四、闭包

闭包就是能够读取其他函数内部变量的函数,闭包基本上就是一个函数内部返回一个函数。

优点:

1、可以读取函数内部的变量;

2、将变量始终保持在内存中;

3、可以封装对象的私有属性和私有方法;

缺点:比较耗费内存、使用不当会造成内存溢出的问题。

五、this

this是 JavaScript 语言的一个关键字。在绝大多数情况下,函数的调用方式决定了 this 的值(运行时绑定)。this总是指向函数的直接调用者。如果有new关键字,this指向new出来的对象。在事件中,this指向触发这个事件的对象。

六、map与forEach的区别

forEach 方法是最基本的方法,就是遍历与循环,默认有 3 个传参。这三个传参分别是遍历的数组内容 item、数组索引 index、和当前遍历数组 Array

map 方法基本用法与 forEach 一致,但是它会返回一个新的数组,所以 callback需要有 return 值,如果没有,会返回 undefined。

七、箭头函数与普通函数

函数体内的 this 对象就是定义时所在的对象,而不是使用时所在的对象。不可以当作构造函数,也不可以使用 arguments 对象,该对象在函数体内不存在。如果一定要用,可以用 Rest 参数代替。不可以使用 yield 命令,因此箭头函数不能用作 Generator 函数。

八、同源策略

同源策略是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。 可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。 它是一个安全策略。所谓同源是指,域名、协议、端口相同。

 

九、严格模式的限制

严格模式主要有以下限制:

1、变量必须声明后再使用

2、函数的参数不能有同名属性,否则报错

3、不能使用with语句

4、不能对只读属性赋值,否则报错

5、不能使用前缀0表示八进制数,否则报错

6、不能删除不可删除的属性,否则报错

7、不能删除变量delete prop,会报错,只能删除属性delete global[prop]

8、eval不会在它的外层作用域引入变量

9、eval和arguments不能被重新赋值

10、arguments不会自动反映函数参数的变化

11、不能使用arguments.callee

12、不能使用arguments.caller

13、禁止this指向全局对象

14、不能使用fn.caller和fn.arguments获取函数调用的堆栈

15、增加了保留字(比如protected、static和interface)

十、es6新增

1、新增模板字符串

2、箭头函数

3、for-of(用来遍历数据—例如数组中的值。)

4、ES6 将 Promise 对象纳入规范,提供了原生的 Promise 对象。

5、增加了 let 和 const 命令,用来声明变量。

6、引入 module 模块的概念

十一、attribute 和 property 的区别

attribute 是 dom 元素在文档中作为 html 标签拥有的属性,而property 就是 dom 元素在 JS 中作为对象拥有的属性。对于 html 的标准属性来说,attribute 和 property 是同步的,是会自动更新的,但是对于自定义的属性来说,他们是不同步的。

十二、let和const 的区别

let和const很相似,但是let 命令不存在变量提升,如果在 let 前使用,会导致报错。如果块区中存在 let 和 const 命令,就会形成封闭作用域。不允许重复声明。const定义的是常量,不能修改,但是如果定义的是对象,可以修改对象内部的数据。

十三、内存泄漏

内存泄漏指的是程序中己动态分配的堆内存由于某种原因程序未释放或无法释放引发的各种问题。

内存泄漏结果:变慢,崩溃,延迟大等

内存泄漏原因:全局变量,dom 清空时,还存在引用,定时器未清除,子元素存在引起的内存泄露。

十四、数组(array)方法

map : 遍历数组,返回回调返回值组成的新数组

forEach : 无法 break ,可以用 try/catch 中 throw new Error 来停止

filter : 过滤

some : 有一项返回 true ,则整体为 true

every : 有一项返回 false ,则整体为 false

join : 通过指定连接符生成字符串

push / pop : 末尾推入和弹出,改变原数组, 返回推入/弹出项

unshift / shift : 头部推入和弹出,改变原数组,返回操作项

sort(fn) / reverse : 排序与反转,改变原数组

concat : 连接数组,不影响原数组, 浅拷贝

slice(start, end) : 返回截断后的新数组,不改变原数组

splice(start,number,value…): 返回删除元素组成的数组,value 为插入项,改变原数组

indexOf / lastIndexOf(value, fromIndex) : 查找数组项,返回对应的下标

reduce / reduceRight(fn(prev, cur) ,defaultPrev) : 两两执行,prev 为上次化简函数的return 值,cur 为当前值(从第二项开始)

十五、JavaScript 深浅拷贝

浅拷贝:Object.assign

深拷贝:可以通过 JSON.parse(JSON.stringify(object)) 来解决

十六、异步编程的实现方式

1、回调函数

优点:简单、容易理解

缺点:不利于维护、代码耦合高

2、事件监听

优点:容易理解,可以绑定多个事件,每个事件可以指定多个回调函数

缺点:事件驱动型,流程不够清晰

3、发布/订阅(观察者模式)

类似于事件监听,但是可以通过‘消息中心’,了解现在有多少发布者,多少订阅者

4、Promise 对象

优点:可以利用 then 方法,进行链式写法;可以书写错误时的回调函数

缺点:编写和理解,相对比较难

5、Generator 函数

优点:函数体内外的数据交换、错误处理机制

缺点:流程管理不方便

6、async 函数

优点:内置执行器、更好的语义、更广的适用性、返回的是 Promise、结构清晰

缺点:错误处理机制

 

十七、面向对象编程思想

基本思想是使用对象,类,继承,封装等基本概念来进行程序设计

优点

1、易维护

2、易扩展

3、开发工作的重用性、继承性高,降低重复工作量。

4、缩短了开发周期

十八、作用域链 

作用域链可以理解为一组对象列表,包含 父级和自身的变量对象,因此我们便能通过作用域链访问到父级里声明的变量或者函数

十九、原型、原型链、继承

原型:每一个构造函数都有一个 prototype 属性,这个属性会在生成实例的时候,成为实例对象的原型对象。javascript 的每个对象都继承另一个对象,后者称为“原型”(prototype)对象。

原型链:每一个对象都有一个 proto 属性,对象的属性和方法,有可能定义在自

身,也有可能定义在它的原型对象。由于原型本身也是对象,又有自己的原型,所

以形成了一条原型链(prototype chain)。

继承:继承就是在子类构造函数中继承父类构造函数的私有属性和原型属性。我们

在子类构造函数中使用 call 或 apply 方法调用父类构造函数并改变其 this 指向为

子类构造函数的 this,此时子类的构造函数就继承了父类的私有属性和私有方法。

将父类的实例化对象赋值给子类的原型对象,此时子类就继承了父类的原型属性和

原型方法。

二十、逐进增强和优雅降级

逐进增强:针对低版本浏览器进行构建页面,保证最基本的功能,然后再针对高版本浏览器进行效果、交互等改进和追加功能达到更好的用户体验。

优雅降级:一开始就构建完整的功能,然后再针对低版本浏览器进行兼容

 

前端开发虽然是一项实践性较强的工作,但是理论知识也是非常重要的,想要在众多求职者中脱颖而出,就要理论基础与实操技能两手抓。如果你连最基本的理论基础都没有掌握好,那面试官又怎么会相信你的技能水平能又多高呢?所以,建议每个前端人在找工作之前都能熟记上面的知识点,能够帮助你更轻松地拿到offer哦~

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue导出word

最近的项目中,需要把vue中的部分内容导出为word形式,之前没有做过这方面的,特记录,由于是初学,所以整理了此模板,注意:这是一个模板,并不是相关字段的解析,每个字段都是做…

ECharts柱状图关闭鼠标hover时的高亮样式

最近在做图表相关的需求,使用的是echarts来画图。 今天算是遇到一个比较坑的点了吧,就是两根柱状图重叠对比,设计图把某根柱状图的颜色设计得比较浅,因为echarts的柱状图本身hover到柱子上的时候,会有个高亮状态&…

JavaScript纯前端解析Excel文件

最近在开发时候遇到了这样的一个需求:需要在前端通过解析Excel将Excel中的值进行回传填入。我想在实际的开发过程中,肯定大家也会遇到这样的需求,在这介绍一个比较不错的JS工具库:js-xlsx,及该库的简单使用方法。 1、…

Three.js-设置环境纹理及加载hdr环境贴图

目录 1.hdr 2.环境纹理(全景) 3.CubeTextureLoader加载立方体环境纹理 4.RGBELoader环境纹理加载 1.hdr HDR全称High-Dynamic Range(高动态光照渲染),通过HDR,显示器或相机可以很好的表现超出其亮度范围…

vue3 antd项目实战——Form表单的提交与校验【v-model双向绑定input输入框、form表单数据,动态校验规则】

vue3 ant design vue项目实战——Form表单【v-model双向绑定数据实现form表单数据的提交】上期文章回顾【UI界面渲染】场景复现(源代码附在文章最后)实现需求1.表单数据及其类型的定义2.表单及各部分数据的双向绑定3.表单提交功能4.校验输入内容不为空5.…

vue-数据绑定

目录 1 数据绑定 2 绑定方式 2.1 单向绑定 2.2 双向绑定 1 数据绑定 Vue中有两种数据绑定方式: 1 单向绑定(v-bind):数据只能从data流向页面。 2 双向绑定(v-modle):数据不仅能从data流向页面,还能从页…

VSCode开发:使用nvm切换node版本

为什么要切换node版本,是因为npm run dev(vant app)时,报了Error [ERR_REQUIRE_ESM]:Must use import to load ES Module这样的错。我使用的node版本是12.16.3,切换到16.15.1就没有这个问题了。 1. 安装nvm前记得要删…

【node进阶】深度解析express框架---编写接口|解决跨域问题

✅ 作者简介:一名普通本科大三的学生,致力于提高前端开发能力 ✨ 个人主页:前端小白在前进的主页 🔥 系列专栏 : node.js学习专栏 ⭐️ 个人社区 : 个人交流社区 🍀 学习格言: ☀️ 打不倒你的会使你更强&a…

Vuex 学习

什么是vuex: 专门在Vue中实现集中式状态(数据)管理的一个Vue插件,对vue应用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于任意组件间通信。 原理…

clone下来的vue项目出现“An unknown git error occurred”,vue全局挂载axios及配置全局请求和响应拦截,uni-app的全局请求和响应拦截,对请求方法的封装

文章目录前言一、如何解决clone下来的vue项目出现“An unknown git error occurred”?二、vue全局挂载axios并设置全局的请求和响应拦截1.先下载安装好axios,这个就不用多说了2,vue2中的全局挂载:3,在vue3中我们又应该怎么全局挂载axios呢&am…

vue中使用百度地图

vue中使用百度地图 之前写过一篇vue调用百度地图的文章,但是写得不是很清晰,所以重新整理一篇;申请百度地图ak 这个我在之前的那篇文章已经讲过,就不再细说,链接如下:vue调用百度地图 初始化地图 引入地图…

同一页面实现recycleView三种布局【recycleView + adapter】

文章目录🥭🥭简介🥭🥭效果图🥭🥭代码🍎🍎三个Adapter修饰器🍎🍎主界面函数 && FuritBean🍎🍎布局文件🥭&#x1f…

js获取dom元素宽高

一,前言 1.对于css盒子模型,我们使用width和height等来定义dom元素的宽高,而有时我们需要在js中获取元素的宽高进行一些操作。 2.dom操作提供了相应的属性来实现这一点 二,clientWidth和clientHeight 1.clientWidth和clientHe…

js监听页面或元素scroll事件,滚动到底部或顶部

基本原理&#xff1a; 1、滚动到底部 元素的滚动距离 元素的可视距离 元素的滚动条总距离2、滚动到顶部 元素的滚动距离 0监听页面滚动 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv&…

Flask:使用SocketIO实现WebSocket与前端Vue进行实时推送(gevent-websocket、flask-socketio、flask不出现running on 127..问题)

前言 本文旨在记录使用Flask框架过程中与前端Vue对接过程中&#xff0c;存在WebSocket总是连接失败导致前端取不到数据的问题。以及在使用WebSocket相关功能的库包gevent-websocket之后&#xff0c;导致运行Flask项目之后&#xff0c;控制台没有显示running on 127.0.0.1:5000…

Vue复刻华为官网(三)

文章目录1 底部列表1.1 思路1.2 代码1.3 效果图1.3.1 搜索框1.3.2 商标2 公司信息2.1 思路2.2 代码2.3 效果图3 上升按钮3.1 思路3.2 代码3.3 效果图4 图标完善4.1 思路4.2 安利图标库1 底部列表 1.1 思路 如上图&#xff0c;这整个的大盒子&#xff0c;又可以被分为上中下三个…

[JavaScript你真的以为这么简单吗]JavaScript高级

✅作者简介&#xff1a;大家好,我是Philosophy7&#xff1f;让我们一起共同进步吧&#xff01;&#x1f3c6; &#x1f4c3;个人主页&#xff1a;Philosophy7的csdn博客 &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 承认自己的无知&#xff0c;乃是开启智慧的大…

three.js中坐标系转换以及camera的position、lookAt与up属性理解

为了更好的理解camera的position、lookAt与up属性&#xff0c;文章最开始我们先来阐述three.js的坐标系转换的概念。 1.监听event的事件获得屏幕坐标 文章的最开始首先讨论在哪里进行点击事件的监听的问题&#xff0c;当鼠标触发点击事件时&#xff0c;event会输出点击位置相对…

使用JS监听键盘按下事件

事件说明 我们将键盘按下后事件的所有属性和方法打印出来&#xff08;这里以按下1为例&#xff09; document.onkeydown function(event){console.log(event);} 这里面有几个需要注意的属性 key:按下按键的名称 keyCode:按下按键的键码 altKey、ctrlKey、shiftKey&#xf…

Vue项目实战——【基于 Vue3.x + Vant UI】实现一个多功能记账本(项目演示、涉及知识点、源码分享)

基于 Vue3.x Vant UI 的多功能记账本&#xff08;一&#xff09; 文章目录基于 Vue3.x Vant UI 的多功能记账本&#xff08;一&#xff09;Vue3.x 实现多功能记账本1、前言2、项目演示3、涉及知识点4、写到最后&#xff08;附源码&#xff09;Vue3.x 实现多功能记账本 1、前…