返回

掌握前端面试必备知识,每日五题,助你轻松通关

前端

1. 箭头函数的 this 指向

箭头函数,又称匿名函数,是 ES6 中引入的简洁函数语法。与普通函数不同,箭头函数中的 this 指向定义它的对象。这意味着,箭头函数不能绑定自己的 this 值,而是继承其定义环境中的 this 值。

例如:

const obj = {
  name: 'John Doe',
  greet: function() {
    console.log(`Hello, my name is ${this.name}`);
  },
  greetArrow: () => {
    console.log(`Hello, my name is ${this.name}`);
  }
};

obj.greet(); // Hello, my name is John Doe
obj.greetArrow(); // Uncaught ReferenceError: Cannot access 'name' before initialization

在 greet 方法中,this 指向 obj 对象,因此可以访问 name 属性。但在 greetArrow 箭头函数中,this 指向 undefined,因为箭头函数没有自己的 this。因此,访问 name 属性会导致 ReferenceError 错误。

2. 对比普通函数和箭头函数

普通函数和箭头函数在语法和行为上存在一些差异。普通函数使用 function 定义,而箭头函数使用箭头符号(=>)定义。普通函数中的 this 指向函数调用时的上下文对象,而箭头函数中的 this 指向定义箭头函数的对象。普通函数可以作为构造函数,而箭头函数不能。普通函数可以被命名,而箭头函数只能是匿名的。

下表总结了普通函数和箭头函数的主要区别:

特征 普通函数 箭头函数
语法 function funcName() { ... } (params) => { ... }
this 指向 函数调用时的上下文对象 定义箭头函数的对象
构造函数 可以 不可以
命名 可以 不可以

3. 谈一谈对 rest 参数的理解

rest 参数是一种函数参数,它可以接收任意数量的参数,并将其收集到一个数组中。rest 参数必须是函数的最后一个参数。

例如:

function sum(...numbers) {
  let total = 0;
  for (const number of numbers) {
    total += number;
  }
  return total;
}

console.log(sum(1, 2, 3, 4, 5)); // 15

在 sum 函数中,...numbers 是 rest 参数。它将所有传递给函数的参数收集到一个名为 numbers 的数组中。然后,该函数遍历 numbers 数组并计算总和。

rest 参数可以用于处理可变数量的参数。这使得函数更加灵活和通用。

4. 对比 map 和 object

map 和 object 都是 JavaScript 中常用的数据结构。map 是一种键值对集合,它允许你使用键来查找值。object 也是一种键值对集合,但它允许你使用点号(.)或方括号([])来访问值。

map 和 object 之间的主要区别在于,map 中的键必须是字符串,而 object 中的键可以是任何类型的值。此外,map 中的值可以是任何类型,而 object 中的值必须是对象。

下表总结了 map 和 object 的主要区别:

特征 map object
必须是字符串 可以是任何类型
可以是任何类型 必须是对象
访问方式 使用方括号([])或点号(.) 只能使用点号(.)

5. 列举常见的正则表达式

正则表达式是一种用于匹配字符串的强大工具。它们可以用于查找、替换、提取和验证字符串。正则表达式使用一系列特殊字符来定义要匹配的模式。

以下是一些常见的正则表达式:

  • ^ :匹配字符串的开头
  • $ :匹配字符串的结尾
  • . :匹配任何字符
  • \d :匹配数字
  • \w :匹配字母、数字或下划线
  • \s :匹配空白字符
  • [abc] :匹配 a、b 或 c 中的任何一个字符
  • [a-z] :匹配小写字母
  • [A-Z] :匹配大写字母
  • {n,m} :匹配至少 n 次、至多 m 次的模式