在前端面试中,有一些常见的知识点和代码示例通常会被问到。
//下崽棵>>> 3w baikeu 点 com
以下是一个深入的前端面试八股文,涵盖了 JavaScript、CSS、HTML 和框架等方面。
### 1. JavaScript 基础
#### 1.1 数据类型
JavaScript 有六种基本数据类型:
- `Undefined`
- `Null`
- `Boolean`
- `Number`
- `BigInt`
- `String`
- `Symbol`
```javascript
console.log(typeof undefined); // "undefined"
console.log(typeof null); // "object"
console.log(typeof true); // "boolean"
console.log(typeof 42); // "number"
console.log(typeof "Hello"); // "string"
```
#### 1.2 闭包
闭包是函数与其引用环境组合而成的结构。
```javascript
function outerFunction() {
let count = 0;
return function innerFunction() {
count++;
return count;
};
}
const counter = outerFunction();
console.log(counter()); // 1
console.log(counter()); // 2
```
#### 1.3 原型链
每个 JavaScript 对象都有一个内部链接到另一个对象的属性,这个对象叫做原型。
```javascript
function Person(name) {
this.name = name;
}
Person.prototype.sayHello = function() {
console.log(`Hello, my name is ${this.name}`);
};
const john = new Person("John");
john.sayHello(); // "Hello, my name is John"
```
### 2. DOM 操作
#### 2.1 获取元素
使用 `document.getElementById`、`document.querySelector` 等方法获取 DOM 元素。
```javascript
const element = document.getElementById('myElement');
const allDivs = document.querySelectorAll('div');
```
#### 2.2 修改元素
通过 `innerText`, `style` 或 `setAttribute` 修改元素属性。
```javascript
element.innerText = "New Text";
element.style.color = "red";
element.setAttribute("data-custom", "value");
```
### 3. CSS 相关
#### 3.1 Flexbox 布局
Flexbox 是一种一维布局模型,可以有效地排列子元素。
```css
.container {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
}
.item {
flex: 1;
}
```
#### 3.2 CSS Grid
Grid 是一种二维布局模型。
```css
.grid-container {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 10px;
}
.grid-item {
background-color: lightblue;
padding: 20px;
}
```
### 4. 异步编程
#### 4.1 Promises
Promises 提供了一种更优雅的方式来处理异步操作。
```javascript
const fetchData = () => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve("Data fetched!");
}, 2000);
});
};
fetchData().then(data => console.log(data));
```
#### 4.2 Async/Await
Async/Await 语法使得异步代码看起来像同步代码。
```javascript
const getData = async () => {
const data = await fetchData();
console.log(data);
};
getData(); // "Data fetched!"
```
### 5. 算法与数据结构
#### 5.1 数组去重
使用 Set 来去重数组。
```javascript
const uniqueArray = (arr) => [...new Set(arr)];
console.log(uniqueArray([1, 2, 2, 3, 4, 4])); // [1, 2, 3, 4]
```
#### 5.2 深拷贝
实现一个深拷贝函数。
```javascript
const deepClone = (obj) => {
return JSON.parse(JSON.stringify(obj));
};
const original = { name: "John", address: { city: "NY" } };
const clone = deepClone(original);
clone.address.city = "LA";
console.log(original.address.city); // "NY"
```
### 6. 前端框架(React 示例)
#### 6.1 组件
创建一个简单的 React 组件。
```javascript
import React from 'react';
const Welcome = ({ name }) => {
return <h1>Hello, {name}!</h1>;
};
```
#### 6.2 状态管理
使用 React hooks 管理状态。
```javascript
import React, { useState } from 'react';
const Counter = () => {
const [count,