本文详细介绍了JavaScript的基础知识,包括变量、数据类型、运算符、流程控制语句和面向对象编程等内容。文章还深入探讨了JS面试中常见的问题,如异步编程、闭包、ES6新特性等,并提供了大厂面试中的实际真题,帮助读者更好地准备面试。文中还分享了代码风格与编码规范、算法与数据结构、调试与性能优化等实战技巧,全面覆盖了JS大厂面试真题所需的知识点。
在JavaScript中,变量是用来存储数据的标识符。通过var
、let
或const
关键字声明变量。不同的数据类型可以存储不同类型的数据。
基本数据类型:
number
:存储数值,可以是整数或浮点数。string
:存储文本,用单引号' '
或双引号" "
包围。boolean
:存储逻辑值,可以是true
或false
。undefined
:未初始化或不存在的值。null
:表示空值或不存在的引用。复杂数据类型:
object
:包括数组、日期、函数等复杂结构。symbol
:ES6引入的新数据类型,表示独一无二的值。示例代码:
let number = 10; // number类型 let string = "Hello, World!"; // string类型 let boolean = true; // boolean类型 let undefinedExample; // undefined类型 let nullExample = null; // null类型 let array = [1, 2, 3]; // object类型 let date = new Date(); // object类型 let functionExample = function() {}; // object类型 let symbol = Symbol("unique"); // symbol类型
运算符用于在JavaScript中执行操作。表达式是包含运算符和操作数的语句。
算术运算符:
+
:加法-
:减法*
:乘法/
:除法%
:取余示例代码:
let a = 10; let b = 5; console.log(a + b); // 15 console.log(a - b); // 5 console.log(a * b); // 50 console.log(a / b); // 2 console.log(a % b); // 0
逻辑运算符:
&&
:逻辑与||
:逻辑或!
:逻辑非示例代码:
let isTrue = true; let isFalse = false; console.log(isTrue && isFalse); // false console.log(isTrue || isFalse); // true console.log(!isTrue); // false
流程控制语句用于控制程序的执行流程。
条件语句:
if
:单条件判断else
:条件不成立时的处理else if
:多条件判断示例代码:
let age = 20; if (age >= 18) { console.log("成年"); } else { console.log("未成年"); } let score = 85; if (score > 90) { console.log("优秀"); } else if (score > 70) { console.log("良好"); } else { console.log("及格"); }
循环语句:
for
:循环指定次数while
:条件满足时循环do...while
:至少执行一次循环示例代码:
for (let i = 0; i < 5; i++) { console.log(i); } let j = 0; while (j < 5) { console.log(j); j++; } do { console.log(j); j++; } while (j < 5);
函数是JavaScript中封装代码块的方式,允许重复使用代码。
函数声明:
function add(a, b) { return a + b; } console.log(add(2, 3)); // 5
函数表达式:
let multiply = function(a, b) { return a * b; }; console.log(multiply(2, 3)); // 6
作用域:
示例代码:
let globalVar = "I am global"; function demonstrateScope() { let localVar = "I am local"; console.log(globalVar); // "I am global" console.log(localVar); // "I am local" } demonstrateScope(); console.log(globalVar); // "I am global" console.log(localVar); // ReferenceError: localVar is not defined
在JavaScript中,对象是基于原型链的。每个对象都有一个原型对象,原型对象也可以有原型,形成一个链。
示例代码:
let person = { name: "Alice", age: 25 }; console.log(person.name); // "Alice" let personPrototype = Object.getPrototypeOf(person); console.log(personPrototype); // { constructor: [Function: Object] }
ES6引入类和继承的概念,简化了面向对象编程。
类定义:
class Animal { constructor(name) { this.name = name; } speak() { return "My name is " + this.name; } } let animal = new Animal("Dog"); console.log(animal.speak()); // "My name is Dog"
继承:
class Cat extends Animal { constructor(name, color) { super(name); this.color = color; } speak() { return "My name is " + this.name + " and I am " + this.color; } } let cat = new Cat("Tom", "White"); console.log(cat.speak()); // "My name is Tom and I am White"
封装是隐藏实现细节,模块化是将代码组织成模块,提高代码复用性和可维护性。
示例代码:
// module.js export const add = (a, b) => a + b; export const subtract = (a, b) => a - b; // main.js import { add, subtract } from './module.js'; console.log(add(2, 3)); // 5 console.log(subtract(5, 3)); // 2
异步编程是JavaScript中处理非阻塞操作的关键特性。回调地狱是由于多层回调嵌套导致代码难以阅读和维护。
示例代码:
function asyncOperation(callback) { setTimeout(() => { callback("Result"); }, 1000); } asyncOperation((result) => { console.log(result); asyncOperation((result2) => { console.log(result2); asyncOperation((result3) => { console.log(result3); }); }); });
解决方案:
Promise
async/await
Promise示例:
function asyncOperation() { return new Promise((resolve) => { setTimeout(() => { resolve("Promise Result"); }, 1000); }); } asyncOperation().then((result) => { console.log(result); return asyncOperation(); }).then((result2) => { console.log(result2); return asyncOperation(); }).then((result3) => { console.log(result3); });
async/await示例:
async function asyncOperation() { return new Promise((resolve) => { setTimeout(() => { resolve("Async/Await Result"); }, 1000); }); } async function run() { let result = await asyncOperation(); console.log(result); result = await asyncOperation(); console.log(result); result = await asyncOperation(); console.log(result); } run();
闭包是函数和其作用域的组合,使内部函数可以访问外部函数的作用域。
示例代码:
function outer() { let outerVar = "I am outer"; function inner() { console.log(outerVar); } return inner; } let innerFunc = outer(); innerFunc(); // "I am outer"
ES6引入了许多新特性,如let
、const
、模板字符串等。
示例代码:
let name = "Alice"; const age = 25; console.log(`My name is ${name} and I am ${age}`); // "My name is Alice and I am 25" let templateString = `My name is ${name} and I am ${age}`; console.log(templateString); // "My name is Alice and I am 25" const person = { name: "Alice", age: 25 }; const { name: personName, age: personAge } = person; console.log(personName, personAge); // "Alice", 25
代码风格和编码规范有助于保持代码一致性,便于多人协作。
示例代码:
function add(a, b) { return a + b; } const PI = 3.14; if (age >= 18) { console.log("成年"); } else { console.log("未成年"); }
掌握基本的算法和数据结构对于解决复杂的编程问题至关重要。
示例代码:
function bubbleSort(arr) { let len = arr.length; for (let i = 0; i < len - 1; i++) { for (let j = 0; j < len - 1 - i; j++) { if (arr[j] > arr[j + 1]) { [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]; } } } return arr; } console.log(bubbleSort([3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5])); // [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]
调试工具和性能优化技术可以帮助开发人员找到和解决问题。
示例代码:
function debugExample() { let num = 0; for (let i = 0; i < 1000000; i++) { num += i; } console.log(num); } debugExample();
使用浏览器的开发者工具进行调试和性能分析。
function countOccurrences(arr, element) { return arr.filter(item => item === element).length; } console.log(countOccurrences([1, 2, 3, 2, 1], 2)); // 2
function countCharOccurrences(str) { let charMap = {}; for (let char of str) { if (charMap[char]) { charMap[char]++; } else { charMap[char] = 1; } } return charMap; } console.log(countCharOccurrences("hello")); // { h: 1, e: 1, l: 2, o: 1 }
let count = 0; function increase() { count++; console.log("Count: " + count); } function decrease() { count--; console.log("Count: " + count); } increase(); // Count: 1 decrease(); // Count: 0
面试后及时总结和复盘,找出自己的不足之处。
示例反馈:
持续学习和提升自己的技术能力,保持对新技术的关注。
学习路径:
推荐学习网站: