21天精通JavaScript核心语法,大厂面试官都在看这篇

JavaScript 语言基础

Posted by ZhuLang on March 26, 2025

震惊!这个 JavaScript 基础知识,95%的前端都学错了!

你是否还在为 JavaScript 的基础语法感到困惑?

你是否曾经被面试官问到变量提升、闭包、原型链而答不上来?

你是否觉得自己写的代码总是不够优雅,无法达到大厂要求?

如果你有以上任何一个困扰,那这篇文章将彻底改变你的 JavaScript 学习之路!让我们开始这段激动人心的 JavaScript 进阶之旅吧!

一、变量声明的三大法宝:var、let、const

在 JavaScript 中,变量声明看似简单,实则暗藏玄机。很多人以为随便用一个就行,这个想法简直太危险了!让我们一起揭开变量声明的神秘面纱。

1. const:你的代码守护神

1
2
3
const PI = 3.14159;
// 以下代码会报错
PI = 3.14; // TypeError: Assignment to constant variable

为什么大厂都在推崇 const?

  • 防止意外修改变量值
  • 提高代码可读性
  • 帮助代码优化

2. let:块级作用域的完美代言人

1
2
3
4
5
6
let message = '外部消息';
if (true) {
  let message = '内部消息';
  console.log(message); // 输出:内部消息
}
console.log(message); // 输出:外部消息

let 的三大超能力:

  1. 块级作用域:变量只在当前代码块有效
  2. 暂时性死区:必须先声明后使用
  3. 不允许重复声明:保证代码的清晰性

3. var:历史遗留问题(慎用)

1
2
3
4
5
6
var x = 1;
if (true) {
  var x = 2;
  console.log(x); // 输出:2
}
console.log(x); // 输出:2(var没有块级作用域!)

var 的三大坑:

  1. 没有块级作用域
  2. 变量提升
  3. 允许重复声明

🔥 面试高频题:var、let、const 的区别是什么?

完美回答:

  1. 作用域:var 是函数作用域,let/const 是块级作用域
  2. 变量提升:var 会提升,let/const 不会
  3. 重复声明:var 允许,let/const 禁止
  4. 修改性:const 声明常量,不能修改;var/let 可以修改

二、数组操作:一个高手的自我修养

数组是前端开发中最常用的数据结构,但很多人只会基本操作,这样怎么能写出高性能的代码?

1. 创建数组的正确姿势

1
2
3
4
5
6
// 👍 推荐写法
let arr1 = [1, 2, 3];
let arr2 = new Array(3).fill(0);

// ⛔ 危险写法(别这么干!)
let arr3 = new Array(3); // [empty × 3]

为什么要用 fill()?

  • 防止出现空数组坑
  • 确保数组有初始值
  • 提高代码可靠性

2. 数组方法大揭秘

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 超级英雄联盟来帮你记忆数组方法😎
let superheroes = ['钢铁侠', '蜘蛛侠', '雷神'];

// 添加英雄
let length1 = superheroes.push('黑寡妇'); // 尾部添加
let length2 = superheroes.unshift('美国队长'); // 头部添加

// 移除英雄
let lastHero = superheroes.pop(); // 尾部移除
let firstHero = superheroes.shift(); // 头部移除

// 查找英雄
let index = superheroes.indexOf('雷神'); // 返回索引

// 切片操作
let team = superheroes.slice(1, 3); // 返回新数组,不修改原数组

3. 数组高级操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 数组遍历(三种方式)
let nums = [1, 2, 3, 4, 5];

// 1. forEach
nums.forEach((num) => console.log(num));

// 2. map
let doubled = nums.map((num) => num * 2);

// 3. filter
let evenNums = nums.filter((num) => num % 2 === 0);

// 数组合并
let arr1 = [1, 2];
let arr2 = [3, 4];
let combined = [...arr1, ...arr2]; // 展开运算符

🔥 面试高频题:数组的 map 和 forEach 有什么区别?

完美回答:

  1. map 会返回一个新数组,forEach 返回 void
  2. map 适合做数据转换,forEach 适合执行操作
  3. map 的性能相对较差,因为要创建新数组

三、Map 和 Set:面试官最爱考的数据结构

如果说数组是前端开发的“必修课”,那么 Map 和 Set 就是你的“进阶选修”。这两个数据结构可以让你的代码更加优雅、高效!

1. Map:对象的完美替代品

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 创建一个用户信息管理系统

// 👍 使用Map
let userMap = new Map();
userMap.set('name', '张三');
userMap.set('age', 25);
userMap.set('skills', ['前端', 'JavaScript']);

// 获取数据
console.log(userMap.get('name')); // 输出:张三

// 检查存在
console.log(userMap.has('age')); // true

// 删除数据
userMap.delete('age');

// 遍历Map
for (let [key, value] of userMap) {
  console.log(`${key}: ${value}`);
}

Map 的四大超能:

  1. 键可以是任意类型(对象只能用字符串)
  2. 保持插入顺序(对象不保证)
  3. 易于遍历(直接遍历键值对)
  4. 简单获取大小(size 属性)

2. Set:数组去重的终极武器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 创建一个用户标签系统

// 👍 使用Set
let tagSet = new Set(['JavaScript', 'React', 'Vue', 'React']);

// 自动去重!
console.log(tagSet.size); // 3,而不是4

// 添加标签
tagSet.add('TypeScript');

// 删除标签
tagSet.delete('Vue');

// 检查标签
console.log(tagSet.has('React')); // true

// 转换回数组
let tagsArray = [...tagSet];

实战案例:用 Set 实现数组去重

1
2
3
4
5
6
7
8
9
10
11
// 传统方式
function uniqueArray(arr) {
  return arr.filter((item, index) => arr.indexOf(item) === index);
}

// 使用Set(一行代码搞定!)
const uniqueArray = (arr) => [...new Set(arr)];

// 测试
let numbers = [1, 2, 2, 3, 3, 4];
console.log(uniqueArray(numbers)); // [1, 2, 3, 4]

🔥 面试高频题:为什么要用 Map 而不是普通对象?

完美回答:

  1. Map 的键可以是任意类型,对象只能是字符串
  2. Map 保持键的插入顺序,对象不保证
  3. Map 专门用于数据存储,性能更好
  4. Map 提供了直接遍历键值对的方法

四、必读书籍推荐

1. JavaScript 高级程序设计(第 4 版)

这本书被誉为前端界的”红宝书”,是每个前端工程师的必读经典。它不仅系统地介绍了 JavaScript 的基础知识,还深入探讨了语言的底层原理。

核心亮点:

  • 全面覆盖 ES6+语法特性
  • 深入浅出的原理解析
  • 大量实战案例
  • 性能优化指南

2. 你不知道的 JavaScript

这套”黄宝书”是深入理解 JavaScript 的必读之作。它将带你探索 JavaScript 中最难懂的概念:

独特之处:

  • 深入剖析 this 绑定机制
  • 完整讲解原型链继承
  • 揭秘闭包的实现原理
  • 解密异步编程模型

3. 冴羽的 JavaScript 博客

如果说前两本书是”理论圣经”,那么冴羽的博客就是”实战指南”。

为什么推荐?

  1. 内容精炼:每篇文章都直指要害,不废话
  2. 实例丰富:大量代码示例,便于理解
  3. 更新及时:紧跟前端发展潮流
  4. 重点突出:完美契合面试重点

结语:你的 JavaScript 进阶之旅从这里开始!

记住,JavaScript 学习是一个循序渐进的过程。通过本文介绍的知识点和推荐的学习资源,相信你已经找到了正确的学习方向。接下来就是实践、实践、再实践!

🎁 福利放送

  1. 冴羽的博客
  2. [JavaScrip 书籍]https://www.alipan.com/s/hMqw7fpqH8d

    点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。