一、變量聲明:var
、let
、const
的區別
- 作用域
var
:函數作用域(函數內有效)。let
/const
:塊級作用域({}
內有效,如if
、for
)。
- 變量提升
var
會提升變量到作用域頂部(值為undefined
)。let
/const
不會提升,存在暫時性死區(聲明前使用會報錯)。
- 重復聲明
var
允許重復聲明,let
/const
不允許。
- 修改值
const
聲明的是常量,基本類型不可修改,對象/數組的屬性可修改。- 比喻:
const
像貼了標簽的盒子,盒子本身不能換,但里面的東西可以改。
二、箭頭函數 vs 普通函數
區別 | 箭頭函數 | 普通函數 |
---|---|---|
this 指向 | 繼承外層作用域的 this | 由調用方式動態決定 |
構造函數 | 不能使用 new 實例化 | 可以實例化對象 |
arguments 對象 | 無,需用 ...rest 參數 | 有 |
原型屬性 | 無 prototype | 有 |
示例:
// 箭頭函數
const sum = (a, b) => a + b;
// 普通函數
function sum(a, b) { return a + b; }
三、模板字符串
- 特點:使用反引號(
``
)包裹,支持多行文本、變量嵌入(${變量}
)。 - 優點:避免繁瑣拼接,代碼更清晰。
示例:
const name = "小明";
console.log(`你好,${name}!
今天天氣不錯~`); // 支持換行和變量
四、解構賦值
- 作用:從數組/對象中快速提取值,簡化賦值操作。
- 場景:函數參數解構、JSON 數據處理。
示例:
// 數組解構
const [a, b] = [1, 2]; // a=1, b=2
// 對象解構
const { name, age } = { name: "小明", age: 18 };
五、Promise
- 作用:解決回調地獄,管理異步操作(如網絡請求)。
- 狀態:
pending
(進行中)、fulfilled
(成功)、rejected
(失敗)。 - 鏈式調用:通過
.then()
和.catch()
處理結果。
示例:
const promise = new Promise((resolve, reject) => {setTimeout(() => resolve("成功"), 1000);
});
promise.then(res => console.log(res)); // 1秒后輸出"成功"
六、Set 和 Map
結構 | 特點 | 常用方法 |
---|---|---|
Set | 成員唯一(自動去重) | add() , delete() , has() |
Map | 鍵值對集合,鍵可以是任意類型 | set() , get() , has() |
示例:
// Set去重
const arr = [1, 2, 2, 3];
const unique = [...new Set(arr)]; // [1, 2, 3]
// Map存儲鍵值對
const map = new Map();
map.set("name", "小明");
七、Class 類
- 本質:ES6 的類是基于原型的語法糖,更接近傳統面向對象語言。
- 特點:支持繼承(
extends
)、靜態方法(static
)、構造函數(constructor
)。
示例:
class Person {constructor(name) { this.name = name; }sayHello() { console.log(`我是${this.name}`); }
}
const p = new Person("小明");
p.sayHello(); // 輸出"我是小明"
八、async/await
- 作用:以同步方式寫異步代碼,解決回調嵌套問題。
- 原理:
async
函數返回 Promise,await
等待異步操作完成。
示例:
async function fetchData() {const res = await fetch("api/data"); // 等待請求完成const data = await res.json();console.log(data);
}
九、擴展運算符(...
)
- 用途:數組/對象展開、函數參數傳遞。
示例:
// 合并數組
const arr1 = [1, 2], arr2 = [3, 4];
const merged = [...arr1, ...arr2]; // [1, 2, 3, 4]
// 對象合并
const obj1 = { a: 1 }, obj2 = { b: 2 };
const mergedObj = { ...obj1, ...obj2 }; // { a:1, b:2 }
十、模塊化(import
/export
)
- 作用:拆分代碼為獨立模塊,便于維護和復用。
- 用法:
// 導出 export const name = "小明"; export default function() { ... }; // 導入 import { name } from './module'; import myFunc from './module';
總結高頻考點
- 變量聲明:
let
/const
的塊級作用域和暫時性死區。 - 箭頭函數:
this
綁定和匿名特性。 - Promise:狀態管理和鏈式調用。
- 解構賦值:簡化數據提取。
- Class 和模塊化:面向對象編程和代碼組織。
以上問題覆蓋了 ES6 的核心知識點,建議結合代碼實踐加深理解。如需更完整題目,可參考:CSDN-ES6面試題 或 掘金-ES6面試題。