1.为什么选择前端

2.介绍一个自己的项目

3.如何进行的技术选型?

4.怎样学习新技术的

5.如果现在重新做这个项目,你会怎么样

6.具体一点,在部署方面,会有什么改进?

7.let,var和const之间的区别

[[前端面试常见题-JS篇]]

8.有哪些常用的数组方法

以下是一些常用的数组方法,按照是否改变原数组分为两类

1. 改变原数组 (Mutating Methods)

这些方法会直接修改调用它们的数组本身。

方法描述返回值
push()在数组末尾添加一个或多个元素。新数组的长度
pop()删除并返回数组的最后一个元素。被删除的元素
shift()删除并返回数组的第一个元素。被删除的元素
unshift()在数组开头添加一个或多个元素。新数组的长度
splice()万能方法:可以从指定位置删除、插入或替换元素。包含被删除元素的数组
sort()对数组元素进行排序注意: 默认按字符串的 Unicode 码位排序!排序后的数组(原数组的引用)
reverse()反转数组中元素的顺序。反转后的数组(原数组的引用)
fill()用一个固定值填充数组中从起始索引到终止索引内的全部元素。修改后的数组(原数组的引用)

2. 不改变原数组 (Non-mutating Methods)

这些方法会返回一个新的数组或一个新的值,而不会修改原始数组。这是现代 JavaScript (特别是函数式编程和 React 等框架) 中更推荐的方式。

A. 创建新数组

方法描述返回值
map()映射:遍历数组,对每个元素执行一个函数,并将结果组成一个新数组返回。一个新的、经过转换的数组
filter()过滤:返回一个新数组,其中包含所有通过所提供函数测试的元素。一个新的、经过过滤的数组
slice()切片:返回一个从 start 到 end(不包括 end)选择的数组部分的浅拷贝一个新的、包含切片元素的数组
concat()连接:用于合并两个或多个数组。一个新的、合并后的数组
flat()扁平化:创建一个新数组,并将所有子数组元素递归地连接到指定深度。一个新的、扁平化的数组
flatMap()先对每个元素执行 map 操作,然后对结果执行 flat 操作(深度为1)。一个新的、扁平化的数组

B. 查找元素/信息

方法描述返回值
find()返回数组中满足测试函数的第一个元素的值。否则返回 undefined找到的元素值或 undefined
findIndex()返回数组中满足测试函数的第一个元素的索引。否则返回 -1找到的元素索引或 -1
includes()判断一个数组是否包含一个指定的值,返回 true 或 falsetrue 或 false
indexOf()返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回 -1索引值或 -1

C. 迭代与归并

方法描述返回值
forEach()遍历:对数组的每个元素执行一次给定的函数。undefined
reduce()归并:对数组中的每个元素执行一个 “reducer” 函数(升序执行),将其结果汇总为单个返回值。函数累计处理的结果
every()测试所有:测试一个数组内的所有元素是否都能通过某个指定函数的测试。true 或 false
some()测试部分:测试数组中是不是至少有1个元素通过了被提供的函数测试。true 或 false
join()连接成字符串:将一个数组的所有元素连接成一个字符串并返回这个字符串。一个包含所有数组元素的字符串

9.forEach和map的区别

特性forEach()map()
主要目的执行副作用 (Side Effects)。比如打印到控制台、修改外部变量、操作 DOM 等。数据转换 (Transformation)。从一个数组派生出另一个具有不同数据或结构的数组。
返回值undefined一个新的数组,长度与原数组相同。
链式调用不可以。因为它返回 undefined,你不能在其后链接其他数组方法。可以。因为它返回一个新数组,你可以继续链接 .filter().reduce() 等方法。

10.some的用法

见上

11.promise是为了解决什么问题,如何解决的,再介绍一下 async, await

12.promise和async语法在错误处理上有什么区别

Promise可以使用 .catch(),async一般用 try ... catch

对于Promise来说,链条上任何一个promise变为 rejected状态,会跳过后续所有 .then() ,直到找到第一个 .catch()

而try catch可以捕获所有try代码块中的错误

深入讨论一下,如果需要再请求失败之后再继续执行,对于try catch,可以直接在catch块下方添加代码就行,但是对于 .catch(),就需要在其内部返回一个普通值,再继续 .then()

此外,try catch块可以无缝捕获同步错误

13.promise是怎样实现链式调用的,如果传入的是一个字符串呢?传入字符串和传入Promise(“字符串“)有什么区别

如果传入一个字符串,直接返回一个fulfilled状态的promise,返回值是这个字符串的值,这是 同步

如果是返回的一个 new Promise(resolve => resolve("字符串"),就是 异步 的行为。

14.ts有哪些常用的工具类

[[前端面试常见题-JS篇]]

15.git中分支你是怎么理解的

多人协作,互不影响

16.合并过程中的冲突是怎么解决的

17.了解哪些http状态码

[[前端面试常见题-网络和工程化篇]]

18.get 和 post有什么区别

[[前端面试常见题-网络和工程化篇]]

19.手撕:实现一个历史浏览记录功能,visit方法访问新页面,清除当前页面之后的所有历史数据,back方法,往后退n个页面,forward方法往前进n个页面

美团食杂零售一面

作者

MeorinLime 梦灵

发布日期

2025 - 08 - 20