返回

JS常见面试题:码农求职指南

前端

一、数据类型:JS 的积木

在 JS 的世界中,数据类型就像积木,构成了一切。从数字到字符串,再到对象和函数,每种类型都有其独特的特性,理解它们至关重要。

二、typeof:揭秘数据类型

typeof 运算符就像一面镜子,让我们了解变量的数据类型。它揭示了变量的本质,无论是数字、字符串还是其他类型,让我们能够根据相应处理它们。

三、箭头函数 vs. 普通函数:谁更胜一筹

箭头函数和普通函数是 JavaScript 函数界的两个兄弟,各有特色。箭头函数更简洁、更强大,但两者都能完成相同的工作,选择权在于您。

四、this 函数中的神秘指向

this 就像函数内部的一盏灯,指向调用函数的对象。它允许我们访问函数所在对象的属性和方法,揭开函数的真正威力。

五、call 和 apply:改变函数的命运

call 和 apply 方法是函数调用的魔术师。它们可以改变函数的 this 指向,就像在函数周围施加了一个隐形魔法圈,赋予我们更大的控制权。

六、undefined 和 null:似是而非的表兄弟

undefined 和 null 经常被混淆,但它们本质不同。undefined 表示变量没有被赋值,而 null 表示变量被明确赋值为 null。区分它们至关重要,避免潜在的错误。

七、变量提升:JS 的隐形力量

在 JS 中,变量提升就像一个隐形的精灵,将变量提升到代码顶部。这可能有点让人惊讶,但了解它可以帮助我们避免陷阱,编写更清晰、更可靠的代码。

八、阻止默认行为和事件冒泡:掌控事件流

阻止默认行为和事件冒泡就像在事件流中竖起两道屏障。它们可以控制事件的传播,防止意外行为并提供更好的用户体验。

九、操作符:JS 的魔法工具

操作符是 JS 中的数学魔杖。从简单的加减法到复杂的逻辑运算,它们赋予我们操纵数据和执行复杂操作的能力,使我们能够编写强大的代码。

代码示例

// 数据类型
console.log(typeof 123); // "number"
console.log(typeof "hello"); // "string"
console.log(typeof true); // "boolean"

// typeof 运算符
function getType(x) {
  return typeof x;
}
console.log(getType(10)); // "number"
console.log(getType("JavaScript")); // "string"

// 箭头函数和普通函数
const arrow = () => {
  console.log("我是箭头函数");
};
const regular = function () {
  console.log("我是普通函数");
};
arrow(); // "我是箭头函数"
regular(); // "我是普通函数"

// this 关键字
const obj = {
  name: "John",
  getName: function () {
    return this.name;
  },
};
console.log(obj.getName()); // "John"

// call 和 apply 方法
function greet(name) {
  console.log("你好," + name);
}
greet.call(obj, "John"); // "你好,John"
greet.apply(obj, ["John"]); // "你好,John"

// undefined 和 null
let x; // undefined
let y = null; // null
console.log(x === undefined); // true
console.log(y === null); // true

// 变量提升
console.log(a); // undefined
var a = 10;

// 阻止默认行为和事件冒泡
const button = document.querySelector("button");
button.addEventListener("click", (e) => {
  e.preventDefault(); // 阻止表单提交
  e.stopPropagation(); // 阻止事件冒泡
});

// 操作符
console.log(10 + 5); // 15 (加法)
console.log(10 - 5); // 5 (减法)
console.log(10 * 5); // 50 (乘法)
console.log(10 / 5); // 2 (除法)
console.log(10 % 5); // 0 (求余)

常见问题解答

  1. JS 中有多少种数据类型?

    • 8 种:数字、字符串、布尔值、对象、数组、函数、null 和 undefined。
  2. typeof 运算符的用途是什么?

    • 确定变量的数据类型。
  3. 箭头函数和普通函数有什么区别?

    • 箭头函数更简洁,没有自己的 this 关键字,并且可以使用父函数的 this 关键字。
  4. this 关键字的作用是什么?

    • 指向调用函数的对象。
  5. call 和 apply 方法如何改变函数的 this 指向?

    • call 和 apply 可以指定函数的 this 指向,从而让我们可以将函数应用到不同的对象上。