ES6(ES2015)特性全解析

ES6(ECMAScript 2015)是 JavaScript 語言發展史上的一個重要里程碑,它引入了許多新的語法特性和功能,提升了代碼的可讀性、可維護性和開發效率。

1. 塊級作用域變量:let 和 const

ES6 引入了 letconst 關鍵字,用于聲明塊級作用域的變量,解決了 var 的變量提升和全局污染問題。

// let 示例:塊級作用域
function testLet() {if (true) {let x = 10;}console.log(x); // 報錯:x 未定義
}// const 示例:常量聲明
const PI = 3.14159;
PI = 3.14; // 報錯:無法重新賦值給常量

關鍵點

  • let 允許變量重新賦值,但不能重復聲明
  • const 聲明常量,必須初始化且不能重新賦值
  • 兩者都具有塊級作用域({} 內有效)
2. 箭頭函數(Arrow Functions)

箭頭函數提供了更簡潔的函數語法,并且自動綁定 this 上下文。

// 基本語法
const sum = (a, b) => a + b;// 多行表達式需要大括號和 return
const multiply = (a, b) => {return a * b;
};// 無參數時使用空括號
const sayHello = () => console.log('Hello!');// 自動綁定 this
class Counter {constructor() {this.count = 0;}increment = () => {this.count++; // 箭頭函數保留 this 上下文}
}

優勢

  • 語法更簡潔,省去 functionreturn 關鍵字
  • 不綁定自己的 this,繼承自父級作用域
  • 適合簡單的回調函數和需要保留上下文的場景
3. 模板字符串(Template Literals)

模板字符串使用反引號(`),支持變量插值和多行字符串。

const name = 'Alice';
const age = 30;// 變量插值
const greeting = `Hello, ${name}! You are ${age} years old.`;// 多行字符串
const message = `This is a multi-linestring using template literals.
`;// 表達式計算
const total = `The total is ${10 + 20}.`;
4. 解構賦值(Destructuring Assignment)

解構賦值允許從數組或對象中提取值并賦值給變量。

// 數組解構
const numbers = [1, 2, 3];
const [a, b, c] = numbers; // a=1, b=2, c=3// 對象解構
const person = {firstName: 'John',lastName: 'Doe',age: 30
};
const { firstName, age } = person; // firstName='John', age=30// 別名和默認值
const { firstName: name, city = 'Unknown' } = person;
5. 擴展運算符(Spread Operator)

擴展運算符(...)可以展開數組或對象。

// 數組擴展
const arr1 = [1, 2];
const arr2 = [...arr1, 3, 4]; // [1, 2, 3, 4]// 合并數組
const merged = [...arr1, ...arr2]; // [1, 2, 1, 2, 3, 4]// 對象擴展
const obj1 = { a: 1, b: 2 };
const obj2 = { ...obj1, c: 3 }; // { a: 1, b: 2, c: 3 }// 函數參數展開
const numbers = [1, 2, 3];
console.log(Math.max(...numbers)); // 3
6. 類(Class)和繼承

ES6 引入了類的語法糖,基于原型實現面向對象編程。

// 類定義
class Animal {constructor(name) {this.name = name;}speak() {console.log(`${this.name} makes a sound.`);}
}// 繼承
class Dog extends Animal {constructor(name) {super(name); // 調用父類構造函數}speak() {console.log(`${this.name} barks.`);}
}const dog = new Dog('Buddy');
dog.speak(); // "Buddy barks."

注意

  • 類是原型繼承的語法糖
  • 使用 extends 關鍵字實現繼承
  • constructor 方法用于初始化對象
  • super() 調用父類的構造函數或方法
7. Promise 對象

Promise 用于處理異步操作,解決回調地獄問題。

// Promise 基本用法
const fetchData = new Promise((resolve, reject) => {setTimeout(() => {const data = { name: 'John', age: 30 };resolve(data); // 操作成功// reject(new Error('Failed to fetch data')); // 操作失敗}, 1000);
});// 使用 Promise
fetchData.then(data => console.log(data)).catch(error => console.error(error));// Promise 鏈式調用
fetchData.then(data => processData(data)).then(result => displayResult(result)).catch(error => handleError(error));
8. 模塊化:import 和 export

ES6 引入了官方的模塊系統,替代了 CommonJS 和 AMD。

// 導出模塊
// utils.js
export const PI = 3.14159;
export function calculateCircleArea(radius) {return PI * radius * radius;
}// 導入模塊
// main.js
import { PI, calculateCircleArea } from './utils.js';
console.log(calculateCircleArea(5));// 導入整個模塊
import * as utils from './utils.js';
console.log(utils.PI);// 默認導出
// logger.js
export default function log(message) {console.log(`[LOG] ${message}`);
}// 導入默認導出
import log from './logger.js';
log('This is a message');
9. 默認參數值

函數參數可以設置默認值,當參數未傳遞時使用默認值。

function greet(name = 'Guest') {console.log(`Hello, ${name}!`);
}greet(); // "Hello, Guest!"
greet('Alice'); // "Hello, Alice!"
10. 剩余參數(Rest Parameters)

剩余參數允許將不確定數量的參數收集為一個數組。

function sum(...numbers) {return numbers.reduce((total, num) => total + num, 0);
}console.log(sum(1, 2, 3)); // 6
console.log(sum(1, 2, 3, 4, 5)); // 15
11. Map 和 Set 數據結構

ES6 引入了新的數據結構 MapSet,提供了更高效的數據存儲和查找方式。

// Map 示例:鍵值對集合
const myMap = new Map();
myMap.set('name', 'John');
myMap.set(1, 'One');console.log(myMap.get('name')); // "John"
console.log(myMap.size); // 2// Set 示例:唯一值集合
const mySet = new Set();
mySet.add(1);
mySet.add(2);
mySet.add(2); // 重復值會被忽略console.log(mySet.has(1)); // true
console.log(mySet.size); // 2

特點

  • Map:鍵可以是任意類型,保持插入順序,提供高效的查找
  • Set:值唯一,自動去重,提供高效的成員檢測
12. 迭代器(Iterators)和 for…of 循環

迭代器是一種接口,為各種不同的數據結構提供統一的訪問機制。

// 數組迭代
const numbers = [1, 2, 3];
for (const num of numbers) {console.log(num); // 1, 2, 3
}// 字符串迭代
const str = 'hello';
for (const char of str) {console.log(char); // 'h', 'e', 'l', 'l', 'o'
}// 自定義迭代器
const myIterable = {[Symbol.iterator]() {let i = 0;return {next() {return i < 3 ? { value: i++, done: false } : { done: true };}};}
};for (const value of myIterable) {console.log(value); // 0, 1, 2
}
13. 生成器(Generators)

生成器是一種特殊的函數,可以暫停執行并在需要時恢復。

// 生成器函數
function* countNumbers() {let i = 0;while (true) {yield i++;}
}const counter = countNumbers();
console.log(counter.next().value); // 0
console.log(counter.next().value); // 1
console.log(counter.next().value); // 2// 生成器用于迭代
function* evenNumbers() {let i = 0;while (i < 10) {yield i;i += 2;}
}for (const num of evenNumbers()) {console.log(num); // 0, 2, 4, 6, 8
}

關鍵點

  • 使用 function* 定義生成器函數
  • yield 關鍵字暫停函數執行并返回值
  • 生成器對象實現了迭代器接口

總結

ES6 的這些新特性極大地提升了 JavaScript 的表達能力和開發效率,使代碼更加簡潔、優雅和易于維護。本文介紹了 ES6 中最核心的特性,包括塊級作用域、箭頭函數、模板字符串、解構賦值、擴展運算符、類和繼承、Promise、模塊化等,以及補充的 Map/Set 數據結構、迭代器和生成器。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/86398.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/86398.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/86398.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

jvm 垃圾收集算法 詳解

垃圾收集算法 分代收集理論 垃圾收集器的理論基礎&#xff0c;它建立在兩個分代假說之上&#xff1a; 弱分代假說&#xff1a;絕大多數對象都是朝生夕滅的。強分代假說&#xff1a;熬過越多次垃圾收集過程的對象就越難以消亡。 這兩個分代假說共同奠定了多款常用的垃圾收集…

數字孿生+AR/VR的融合創新

目錄 引言&#xff1a;工業元宇宙的興起與技術基石數字孿生&#xff1a;工業元宇宙的數字底座 2.1 數字孿生的概念與關鍵要素 2.2 數字孿生在工業領域的應用 2.3 數字孿生的技術架構 (Mermaid Graph) AR/VR&#xff1a;工業元宇宙的沉浸式體驗層 3.1 AR/VR 的概念與技術原理…

圖解C#教程 第五版 第4章 類型、存儲和變量 筆記

第4章 類型、存儲和變量 筆記 4.1 C# 程序是一組類型聲明 C程序是一組函數和數據類型&#xff0c;C程序是一組函數和類&#xff0c; 而C#程序是一組類型聲明&#xff0c;具有如下特征&#xff1a; C# 程序或 DLL 的源代碼是一組類型聲明類型聲明中必須有一個包含 Main 方法…

SpringBoot整合SSM

1. SSM整合步驟 今天帶大家學習一下基于SpringBoot的SSM整合案例&#xff0c;話不多說&#xff0c;咱們開始&#xff0c;要實現SSM整合&#xff0c;有以下這么幾步 導入依賴創建yml配置文件dao層靜態頁面測試類進行測試 1.1 導入依賴 <?xml version"1.0" enco…

多面體模型-學習筆記2

1&#xff09; 多面體模型被應用于解決程序變換問題&#xff0c;并有效地推動了程 序自動并行化等技術的發展。與傳統的解決程序變換的方法相比&#xff0c;多面體模型 具有許多優勢[5]。多面體模型提供了一種強大的抽象&#xff0c;將每個語句的動態語句執 行實例視作一個多面…

基于django+vue的健身房管理系統-vue

開發語言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.8數據庫&#xff1a;mysql 5.7數據庫工具&#xff1a;Navicat12開發軟件&#xff1a;PyCharm 系統展示 會員信息管理 員工信息管理 會員卡類型管理 健身項目管理 會員卡管理 摘要 健身房管理…

【Linux系統】Linux環境變量:系統配置的隱形指揮官

。# Linux系列 文章目錄 前言一、環境變量的概念二、常見的環境變量三、環境變量特點及其相關指令3.1 環境變量的全局性3.2、環境變量的生命周期 四、環境變量的組織方式五、C語言對環境變量的操作5.1 設置環境變量&#xff1a;setenv5.2 刪除環境變量:unsetenv5.3 遍歷所有環境…

Spring AI中使用ChatMemory實現會話記憶功能

文章目錄 1、需求2、ChatMemory中消息的存儲位置3、實現步驟1、引入依賴2、配置Spring AI3、配置chatmemory4、java層傳遞conversaionId 4、驗證5、完整代碼6、參考文檔 1、需求 我們知道大型語言模型 &#xff08;LLM&#xff09; 是無狀態的&#xff0c;這就意味著他們不會保…

Java 高級泛型實戰:8 個場景化編程技巧

文章目錄 一、通配符高級應用&#xff1a;靈活處理類型關系二、泛型方法與類型推斷三、泛型類的嵌套使用四、受限泛型與邊界條件五、泛型與反射結合六、泛型在函數式接口中的應用七、類型擦除與橋接方法八、自定義泛型注解總結 在Java編程中&#xff0c;泛型不僅是類型安全的保…

[藍橋杯 2024 國 B] 立定跳遠

問題描述 在運動會上&#xff0c;小明從數軸的原點開始向正方向立定跳遠。項目設置了 n 個檢查點 a1,a2,...,an且 ai≥ai?1>0。小明必須先后跳躍到每個檢查點上且只能跳躍到檢查點上。同時&#xff0c;小明可以自行再增加 m 個檢查點讓自己跳得更輕松。在運動會前&#xf…

2025年全國I卷數學壓軸題解答

第19題第3問: b b b 使得存在 t t t, 對于任意的 x x x, 5 cos ? x ? cos ? ( 5 x t ) < b 5\cos x-\cos(5xt)<b 5cosx?cos(5xt)<b, 求 b b b 的最小值. 解: b b b 的最小值 b m i n min ? t max ? x g ( x , t ) b_{min}\min_{t} \max_{x} g(x,t) bmi…

wpf在image控件上快速顯示內存圖像

wpf在image控件上快速顯示內存圖像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在尋找能夠快速在image控件刷新大圖像&#xff08;比如分辨率3000*3000的圖像&#xff09;的辦法&#xff0c;尤其是想把內存中的裸數據&#xff08;只有圖像的數據&#xff0c;不包…

解決網頁導出PDF部分內容被遮擋問題

問題描述 以學習通為例&#xff0c;在使用CtrlP打印頁面或截圖時&#xff0c;固定側邊欄會遮擋部分內容&#xff0c;影響完整內容的獲取。如下圖所示&#xff1a; 解決辦法 通過瀏覽器開發者工具臨時移除固定側邊欄&#xff0c;具體步驟如下&#xff1a; 在目標頁面右鍵點…

機器學習監督學習實戰六:五種算法對新聞組英文文檔進行文本分類(20類),詞頻統計和TF-IDF 轉換特征提取方法理論和對比解析

本文主要介紹了20 Newsgroups數據集及其在文本分類任務中的應用。20 Newsgroups數據集包含約20,000篇新聞組文檔&#xff0c;分為20個不同主題的新聞組&#xff0c;數據集被分為訓練集和測試集。在數據預處理階段&#xff0c;使用了CountVectorizer和TfidfVectorizer兩種方法將…

易學探索助手-個人記錄(十四)

項目背景 在大語言模型&#xff08;LLM&#xff09;完成指令微調&#xff08;SFT&#xff09;之后&#xff0c;雖然可以處理開放式問答任務&#xff0c;但在專業領域&#xff08;如《周易》&#xff09;仍面臨知識更新滯后、事實性薄弱等問題。為此&#xff0c;本文介紹如何通…

從“人找政策”到“政策找人”:智能退稅ERP數字化重構外貿生態

離境退稅新政核心內容與外貿企業影響 &#xff08;一&#xff09;政策核心變化解析 退稅商店網絡擴容 新政明確鼓勵在大型商圈、旅游景區、交通樞紐等境外旅客聚集地增設退稅商店&#xff0c;并放寬備案條件至納稅信用M級企業。以上海為例&#xff0c;靜安區計劃新增1000家退…

Pandas 可視化集成:數據科學家的高效繪圖指南

為什么選擇 Pandas 進行數據可視化&#xff1f; 在數據科學和分析領域&#xff0c;可視化是理解數據、發現模式和傳達見解的關鍵步驟。Python 生態系統提供了多種可視化工具&#xff0c;如 Matplotlib、Seaborn、Plotly 等&#xff0c;但 Pandas 內置的可視化功能因其與數據結…

曼昆《經濟學原理》第九版 第十一章公共物品與公共資源

一、物品分類的基本框架 排他性&#xff1a;能否阻止他人使用該物品的特性競爭性&#xff1a;一個人使用是否減少他人使用的特性 根據這兩個特性可將物品分為四類&#xff1a; 私人物品&#xff1a;既有排他性又有競爭性&#xff08;如冰淇淋、衣服&#xff09;公共物品&…

基于大模型預測原發性急性閉角型青光眼的技術方案研究大綱

目錄 一、引言二、技術方案概述三、術前階段(一)數據采集與處理(二)大模型預測(三)手術方案制定(四)麻醉方案確定(五)術前健康教育四、術中階段(一)實時數據監測與輸入(二)手術策略動態調整(三)并發癥預警與處理(四)術中健康教育五、術后階段(一)恢復監測與…

基于React 的 AntD 庫進行前端開發過程中的問題匯總

背景 最近寫了半個月的 React 前端&#xff0c;三年沒寫過 React 前端了&#xff0c;有些生疏了&#xff0c;匯總一下 基于React 前端的 antD 庫編寫過程中的低級問題吧。 PS 一下&#xff0c;半個月沒有發布博客了&#xff0c;C站產品經理又悄默默地改了樣式&#xff0c;博客…