首页 程序笔记 2024年前端JavaScript面试题

2024年前端JavaScript面试题

1.JavaScript中的数据类型?存储上的差别?

JavaScript 中的数据类型分为两类:基本数据类型和复杂数据类型。

基本数据类型:包括数字、字符串、布尔值、null 和 undefined。基本数据类型存储在栈上,占用固定的内存空间。

复杂数据类型:包括对象、数组和函数。复杂数据类型存储在堆上,占用动态的内存空间。

2.说说你了解的js数据结构?

JavaScript 中的数据结构主要包括以下几种:

数组:用于存储一组具有相同类型的元素。 对象:用于存储一组具有不同类型的元素。 链表:用于存储一组元素,每个元素都指向下一个元素。 树:用于存储一组元素,每个元素可以有多个子元素。 图:用于存储一组元素,每个元素可以有多个相邻元素。

3.DOM常见的操作有哪些?

DOM 常见的操作包括:

创建元素:使用 createElement() 方法创建元素。 添加元素:使用 appendChild() 方法添加元素。 删除元素:使用 removeChild() 方法删除元素。 修改元素:使用 setAttribute() 方法修改元素的属性。 获取元素:使用 querySelector() 方法获取元素。

4.说说你对BOM的理解,常见的BOM对象你了解哪些?

BOM 是 Browser Object Model 的缩写,是浏览器对象模型。BOM 对象是浏览器提供的用于与浏览器进行交互的对象。常见的 BOM 对象包括:

window:代表浏览器窗口。 document:代表 HTML 文档。 navigator:代表浏览器信息。 screen:代表屏幕信息。 history:代表浏览器历史记录。

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

== 和 === 都是用于比较两个值是否相等的运算符。

== 是比较两个值的值是否相等,不考虑类型。

=== 是比较两个值的值和类型是否都相等。

6.typeof 与instanceof区别

typeof 是用于获取变量或表达式的类型的运算符。

typeof 返回变量或表达式的类型字符串。

instanceof 是用于判断一个变量是否是某个对象的实例的运算符。

7.JavaScriptl原型,原型链?有什么特点?

JavaScript 中的每个对象都继承自一个原型对象。原型对象是一个特殊的对象,它用于存储对象的属性和方法。

原型链是对象继承原型对象的链条。从一个对象到它的原型对象,再到它的原型对象的原型对象,以此类推,就构成了原型链。

原型链的特点是:

对象可以通过原型链访问到原型对象的属性和方法。 对象可以通过原型链修改原型对象的属性和方法。

8.说说你对作用域链的理解

作用域链是用于确定变量或函数的作用域的链条。从函数定义的上下文开始,再到函数的父上下文,以此类推,就构成了作用域链。

作用域链的特点是:

变量或函数的作用域是从作用域链中找到的第一个变量或函数定义的作用域。 变量或函数的作用域可以通过作用域链修改。

9.谈谈this对象的理解

this 是一个特殊的对象,它用于表示当前上下文中的对象。

this 对象的特点是:

this 对象可以是函数的上下文对象,也可以是变量的上下文对象。 this 对象可以通过作用域链修改。

10.说说new操作符具体干了什么?

new 操作符用于创建一个新的对象实例。

new 操作符会做以下几件事:

调用构造函数,创建一个新的对象实例。 将新创建的对象实例赋值给 this 对象。 将 this 对象作为参数传递给构造函数。

11.bind、 call、apply区别?如何实现一个bind?

bind、call、apply 都是用于调用函数的函数。

bind:将 this 对象绑定到指定对象,然后调用函数。

call:将指定的参数传递给函数,然后调用函数。

apply:将指定的参数和 this 对象作为参数传递给函数,然后调用函数。

bind 函数的实现如下:

function bind(func, context, args) {
  // 创建一个新的函数
  var bound = function() {
    // 将 `this` 对象绑定到指定对象
    var _this = context || window;
    // 将指定的参数传递给函数
    var _args = args || [];
    // 调用函数
    return func.apply(_this, _args);
  };

  // 返回新的函数
  return bound;
}

12.JavaScript中执行上下文和执行栈是什么?

执行上下文是用于存储函数执行时的信息的对象。

执行栈是用于存储函数调用关系的栈。

13.说说JavaScript中的事件模型

JavaScript 中的事件模型是用于处理用户与页面交互的模型。

事件模型包括以下几个部分:

事件:用户与页面交互时触发的事件。 事件对象:用于描述事件的信息的对象。 事件处理程序:用于处理事件的函数。

14.解释下什么是事件代理?应用场景?

事件代理是用于将一个事件委托给另一个对象的技术。

事件代理的应用场景包括:

简化事件处理逻辑。 提高代码的复用性。 解决事件冒泡问题。

15.说说你对闭包的理解?闭包使用场景

闭包是指在函数内部定义的函数,它可以访问到函数外部变量。

闭包的使用场景包括:

存储全局状态。 实现延迟执行。 实现装饰器。

16.谈谈JavaScript中的类型转换机制

JavaScript 中的类型转换机制包括以下几种:

隐式类型转换:在没有显式转换的情况下,JavaScript 会自动将一种类型的值转换为另一种类型。

显式类型转换:使用 typeof、instanceof、parseInt()、parseFloat() 等方法可以将一种类型的值转换为另一种类型。

17.深拷贝浅拷贝的区别?如何实现一个深拷贝?

深拷贝是指将一个对象的所有属性和值都复制到另一个对象中,包括对象的引用。

浅拷贝是指将一个对象的所有属性和值都复制到另一个对象中,但不会复制对象的引用。

深拷贝可以使用以下方法实现:

使用 Object.assign() 方法。

使用 JSON.stringify() 和 JSON.parse() 方法。

使用 for...in 循环和 Object.create() 方法。

18.Javascript中如何实现函数缓存?函数缓存有哪些应用场景?

JavaScript 中可以使用以下方法来实现函数缓存:

使用 Object.defineProperty() 方法

function myFunc() {
  // ...
}

const cache = new Map();

function cachedFunc(...args) {
  // 使用 `Object.defineProperty()` 方法来缓存函数的结果
  if (!cache.has(args)) {
    cache.set(args, myFunc(...args));
  }

  // 返回缓存的结果
  return cache.get(args);
}

使用 bind() 方法

function myFunc() {
  // ...
}

const cachedFunc = myFunc.bind(null);

function cachedFunc(...args) {
  // ...
}

使用 memoize() 函数

import memoize from 'memoize-one';

const myFunc = memoize(function() {
  // ...
});

function cachedFunc() {
  // ...
}

函数缓存的应用场景包括:

提高性能:对于需要频繁调用的函数,使用函数缓存可以提高性能。 减少内存占用:对于需要大量计算的函数,使用函数缓存可以减少内存占用。 提高可维护性:对于复杂的函数,使用函数缓存可以提高可维护性。

19.JavaScript宁字符串的常用方法有哪些?

JavaScript 中的字符串有以下常用方法:

concat():将多个字符串连接起来。

slice():返回字符串的一部分。

indexOf():返回字符串中某个字符或子字符串的索引。

lastIndexOf():返回字符串中某个字符或子字符串的最后一个索引。

toUpperCase():将字符串转换为大写。

toLowerCase():将字符串转换为小写。

trim():去除字符串两端的空格。

replace():将字符串中的某个字符或子字符串替换为另一个字符或子字符串。

split():将字符串分割为多个字符串。

20.数组的常用方法有哪些?

JavaScript 中的数组有以下常用方法:

push():向数组末尾添加一个元素。 pop():从数组末尾删除一个元素。 unshift():向数组开头添加一个元素。 shift():从数组开头删除一个元素。 indexOf():返回数组中某个元素的索引。 lastIndexOf():返回数组中某个元素的最后一个索引。 concat():将多个数组连接起来。 slice():返回数组的一部分。 sort():对数组进行排序。 reverse():对数组进行反转。

21.说说你对事件循环的理解

JavaScript 的事件循环是浏览器用于处理用户输入和 DOM 事件的机制。

事件循环的工作原理如下:

浏览器将所有待处理的事件放入事件队列中。 浏览器在每一个浏览器帧中,从事件队列中取出一个事件,并将其交给事件处理程序。 事件处理程序执行完毕后,事件循环继续从事件队列中取出一个事件,并将其交给事件处理程序。

22.Javascript本地存储的方式有哪些?区别及应用场景?

JavaScript 中可以使用以下几种方式来存储本地数据:

SessionStorage:用于存储会话数据,在用户关闭浏览器后会被清除。 localStorage:用于存储永久数据,不会在用户关闭浏览器后被清除。 cookies:用于存储少量的数据,通常用于存储用户偏好设置。

SessionStorage 和 localStorage 的区别在于:

SessionStorage 的数据在用户关闭浏览器后会被清除,而 localStorage 的数据不会被清除。 SessionStorage 的数据的大小限制为 5MB,而 localStorage 的数据的大小限制为 50MB。

SessionStorage 的应用场景包括:

存储用户在会话期间的状态,例如购物车中的商品。 存储用户的偏好设置,例如语言设置。

localStorage 的应用场景包括:

存储用户的登录信息。 存储用户的个人设置。

cookies 的应用场景包括:

存储用户的偏好设置,例如语言设置。 存储用户的登录信息。

23.大文件上传如何做断点续传?

大文件上传可以通过断点续传来提高上传效率。断点续传的原理是将大文件分割成多个小块,然后每块文件单独上传。如果上传过程中出现中断,可以从上次中断的位置继续上传。

大文件上传的断点续传可以通过以下几种方式来实现:

服务器端实现:服务器端会记录每个小块文件的传输进度,如果上传过程中出现中断,服务器端可以从上次中断的位置继续上传。

客户端实现:客户端会记录每个小块文件的传输进度,如果上传过程中出现中断,客户端可以从上次中断的位置继续上传。

服务器端实现 的优点是实现简单,缺点是服务器端需要额外的存储空间来记录每个小块文件的传输进度。

客户端实现 的优点是不需要服务器端的配合,缺点是实现复杂,需要客户端和服务器端都支持断点续传。

24.ajax原理是什么?如何实现?

ajax 是异步 JavaScript 和 XML 的缩写,它是一种用于在浏览器和服务器之间进行异步通信的技术。

ajax 的原理是使用 XMLHttpRequest 对象来发送 HTTP 请求,并使用回调函数来处理服务器响应。

ajax 的实现可以分为以下几个步骤:

创建 XMLHttpRequest 对象。

设置 XMLHttpRequest 对象的请求方法、请求地址和请求参数。

发送 HTTP 请求。

处理服务器响应。

创建 XMLHttpRequest 对象

const xhr = new XMLHttpRequest();

设置 XMLHttpRequest 对象的请求方法、请求地址和请求参数

xhr.open('GET', '/api/users');

// 设置请求参数
xhr.setRequestHeader('Authorization', 'Bearer 1234567890');

发送 HTTP 请求

xhr.send();

处理服务器响应

xhr.onload = function() {
  // 处理服务器响应
};

示例

const xhr = new XMLHttpRequest();

xhr.open('GET', '/api/users');

xhr.onload = function() {
  if (xhr.status === 200) {
    // 处理服务器响应
    const users = JSON.parse(xhr.responseText);
  } else {
    // 处理错误
  }
};

xhr.send();

总结

ajax 是一种非常强大的技术,可以用于在浏览器和服务器之间进行异步通信,从而提高用户体验。

站心网

1.JavaScript中的数据类型?存储上的差别? JavaScript 中的数据类型分为两类:基本数据类型和复杂数据类型。..

为您推荐

Web前端入门第 57 问:JavaScript 数据类型与类型转换

在程序语言中,数据类型是基础,一切程序都是建立在基础数据之上。如果说程序如同万丈高楼平地起,那么数据类型就像沙、石、钢筋、水泥等等最基础的原料。一样的高楼,不同的人,用相同的原料,造的方法也会有千般变..

JavaScript实现图片上传预览及获取图片尺寸和大小的完整指南

在现代Web开发中,提供图片上传的预览功能以及获取图片的尺寸和大小信息,已成为提升用户体验的重要手段。本文将详细介绍如何使用JavaScript实现这些功能,帮助你在用户上传图片前进行有效的验证和优化。一、实现图..

Web前端入门第 60 问:JavaScript 各种数组定义与数组取值方法

数组可以算是程序里面最常用的数据结构了,但凡网页上任何一个列表数据,基本都是以数组的形式存在,像表格、banner图、菜单列表、商品列表,分类列表等等,在前端领域都是以数组处理。数组的定义JS 的数组花样很多..

Web前端入门第 55 问:JavaScript 严格模式与非严格模式区别

JavaScript 默认是非严格模式的,可以通过 "use strict"; 启用严格模式。此声明语句可以放在 JS 文件顶部,也可以放在函数内部。启用严格模式1、外部脚本在 JS 文件开头声明,内部脚本在 <script> 标签开头声明,声..

Web前端入门第 53 问:JavaScript 的各种调试方法

任何一门编程语言,在学习之前都应该先弄清楚它的调试方法,毕竟没有不挖坑的人类!程序一旦出现问题,第一时间就是找到问题出在哪儿,其次才是拿出解决办法。如果都找不到问题原因,那又何从谈起解决办法呢?如何排..

Web前端入门第 52 问:JavaScript 的应用领域

截至目前,您应该对前端的 HTML + CSS 应该有了很清楚的认知,至少实现一个静态网页已经完全不在话下了。当然,CSS 功能绝不止这些,一些不太常用的 CSS 相关知识,后续将通过案例进行分享。那么咱们接下来看看 Java..

.NET C# 过滤从富文本编辑器html里的Javascript脚本

富文本编辑器在允许用户输入丰富内容的同时,也带来了跨站脚本攻击(XSS)的风险。过滤提交的 HTML 中的 <script> 脚本是防止跨站脚本攻击(XSS)的关键步骤。在 .NET C# 服务端过滤 <script> 脚本主要有以下几种方..

前端CSS框架Bootstrp和TailWind CSS如何选择?

在当今前端开发领域,CSS框架扮演着至关重要的角色,它们不仅简化了样式编写,也提高了开发效率。Bootstrap与Tailwind CSS作为两个备受瞩目的框架,各自拥有独特的特点与适用场景,开发者在项目启动之初,往往会面临..

轻松学习 JavaScript函数中的默认参数

JavaScript函数可以有默认参数值。通过默认函数参数,你可以初始化带有默认值的正式参数。如果不初始化具有某些值的参数,则该参数的默认值为undefined。请看下列代码:function foo(num1){console.log(num1);}foo()..

JavaScript API 设计原则详解

前言本篇博文来自一次公司内部的前端分享,从多个方面讨论了在设计接口时遵循的原则,总共包含了七个大块。系卤煮自己总结的一些经验和教训。本篇博文同时也参考了其他一些文章,相关地址会在后面贴出来。很难做到详..

JavaScript 中精度问题以及解决方案

JavaScript 中的数字按照 IEEE 754 的标准,使用 64 位双精度浮点型来表示。其中符号位 S,指数位 E,尾数位M分别占了 1,11,52 位,并且在ES5 规范中指出了指数位E的取值范围是[-1074, 971]。精度问题汇总想用有限..

JavaScript 六种继承方式

继承是面向对象编程中又一非常重要的概念,JavaScript支持实现继承,不支持接口继承,实现继承主要依靠原型链来实现的。原型链首先得要明白什么是原型链,在一篇文章看懂proto和prototype的关系及区别中讲得非常详细..

JavaScript 事件委托详解

基本概念事件委托,通俗地来讲,就是把一个元素响应事件(click、focus……)的函数委托到另一个元素;一般来讲,会把一个或者一组元素的事件委托到它的父层或者更外层元素上,真正绑定事件的是外层元素,当事件响应..

JavaScript 中的遍历详解

编程这么多年,要是每次写遍历代码时都用 for 循环,真心感觉对不起 JavaScript 语言~对象遍历为了便于对象遍历的测试,我在下面定义了一个测试对象obj。测试对象// 为 Object 设置三个自定义属性(可枚举)Object.p..

值得探索的 8 个机器学习 JavaScript 框架

JavaScript开发人员倾向于寻找可用于机器学习模型训练的JavaScript框架。下面是一些机器学习算法,基于这些算法可以使用本文中列出的不同JavaScript框架来模型训练:简单的线性回归多变量线性回归逻辑回归朴素贝叶斯..

JavaScript 保留两位小数

以下我们将为大家介绍 JavaScript 保留两位小数的实现方法:四舍五入以下处理结果会四舍五入:var num =2.446242342;num = num.toFixed(2); // 输出结果为 2.45不四舍五入以下处理结果不会四舍五入:第一种,先把小数边..

JavaScript 页面跳转、页面重定向

JavaScript 实现页面跳转重定向可以使用以下两种方法:window.location.replace("url")类似 HTTP 重定向将地址替换成新 url,该方法通过指定 URL 替换当前缓存在历史里(客户端)的项目,因此当使用 replace 方法之..

在 Javascript 中 声明时用 var 与不用 var 的区别

avascript 声明变量的时候,虽然用 var 关键字声明和不用关键字声明,很多时候运行并没有问题,但是这两种方式还是有区别的。可以正常运行的代码并不代表是合适的代码。var num = 1;是在当前域中声明变量。如果在方..

javascript中call()、apply()、bind()的用法终于理解

其实是一个很简单的东西,认真看十分钟就从一脸懵B 到完全 理解!先看明白下面:例 1obj.objAge; // 17obj.myFun() // 小张年龄 undefined例 2shows() // 盲僧 比较一下这两者 this 的差别,第一个打印里面的 this ..

5 个顶级的 JavaScript Ajax 组件和库

在这篇文章中,我们将介绍一些用于AJAX调用的最好的JS库,包括jQuery,Axios和Fetch。欢迎查看代码示例!AJAX是用来对服务器进行异步HTTP调用的一系列web开发技术客户端框架。 AJAX即Asynchronous JavaScript and XM..

发表回复

返回顶部

微信分享

微信分享二维码

扫描二维码分享到微信或朋友圈

链接已复制