前端筆記-ECMAScript語法概覽

更多詳細可以查看1.1 ES6 教程 | 菜鳥教程

這里我將大概記錄ES與JS大概不一樣的部分,方便聯合記憶。

歷史與關系

  • ECMAScript:是一種由 Ecma 國際組織制定的腳本語言規范,它是 JavaScript 的標準化版本。ECMAScript 為 JavaScript 提供了語法、類型、語句、關鍵字等基礎規范,隨著時間推移不斷發展和更新版本。
  • JavaScript:是一種廣泛應用于網頁開發等領域的編程語言,它遵循 ECMAScript 規范,并由各大瀏覽器廠商進行實現和擴展。除了 ECMAScript 規定的核心特性外,JavaScript 還包括宿主環境(如瀏覽器)提供的 API,如 DOM、BOM 等。

變量聲明

  • JS(ES5 及以前):使用var聲明變量,存在變量提升現象,即變量可以在聲明之前使用,其作用域為函數級作用域。例如:
function test() {console.log(x); // 輸出undefinedvar x = 10;
}
test();
  • ES6:引入了letconstlet聲明的變量具有塊級作用域,不存在變量提升,在聲明之前訪問會報錯,稱為 “暫時性死區”。const用于聲明常量,一旦聲明,不可重新賦值,且也具有塊級作用域,當然,僅在一個代碼塊內的聲明let和const變量,僅在代碼塊內有效。例如:
{let y = 20;const z = 30;
}
console.log(y); // 報錯,y is not defined
console.log(z); // 報錯,z is not defined

?傳統 JavaScript 使用var聲明變量,存在函數級作用域和變量提升現象。例如,var聲明的變量可以在聲明之前被訪問,值為undefined,而letconst聲明的變量不存在變量提升,在聲明之前訪問會報錯。


函數

  • JS(ES5 及以前):函數聲明有函數聲明語句和函數表達式兩種方式,this指向在運行時根據函數的調用方式確定,在全局函數中,this指向全局對象(瀏覽器中是window),在對象方法中,this指向調用該方法的對象。例如:
function add(a, b) {return a + b;
}
const subtract = function (a, b) {return a - b;
};
  • ES6:引入了箭頭函數,語法為(param1, param2, ...) => { function body },箭頭函數沒有自己的this,它的this繼承自外層作用域,更適合用于回調函數等場景,避免了this指向不明確的問題。例如:
const numbers = [1, 2, 3, 4, 5];
const doubled = numbers.map((num) => num * 2);

與傳統的function關鍵字定義的函數相比,箭頭函數沒有自己的this綁定,它的this指向定義時所在的外層作用域,避免了一些常見的this指向問題。?


數組

  • JS(ES5 及以前):有pushpopshiftunshift等方法用于操作數組。例如:
const arr = [1, 2, 3];
arr.push(4);
arr.shift();
  • ES6:增加了findfindIndexincludes等方法。find用于找到數組中滿足條件的第一個元素,findIndex用于找到滿足條件的第一個元素的索引,includes用于判斷數組是否包含某個元素。例如:
const numbers = [1, 2, 3, 4, 5];
const found = numbers.find((num) => num > 3);
const index = numbers.findIndex((num) => num === 4);
const hasFive = numbers.includes(5);

對象

  • JS(ES5 及以前):通過對象字面量或構造函數創建對象,使用點語法或方括號語法訪問屬性。例如:
const person = {name: 'John',age: 30
};
console.log(person.name);
console.log(person['age']);
  • ES6:允許對象屬性的簡潔表示法,即屬性名和變量名相同時可以簡寫。還增加了Object.assign方法用于對象的合并,Object.keysObject.valuesObject.entries方法用于獲取對象的鍵、值和鍵值對數組。例如:
const name = 'Alice';
const age = 25;
const person = { name, age }; // 簡潔表示法
const obj1 = { a: 1 };
const obj2 = { b: 2 };
const merged = Object.assign({}, obj1, obj2);
const keys = Object.keys(person);
const values = Object.values(person);
const entries = Object.entries(person);

模塊

  • JS(ES5 及以前):沒有原生的模塊系統,通常使用第三方庫如RequireJS等來實現模塊加載。
  • ES6:引入了原生的模塊系統,使用importexport關鍵字來導入和導出模塊。例如:
    // 定義模塊 math.js
export function add(a, b) {return a + b;
}
export function subtract(a, b) {return a - b;
}
import { add, subtract } from './math.js';
console.log(add(5, 3));
console.log(subtract(5, 3));

字符串

  • JS(ES5 及以前):有charAtindexOfsubstring等方法操作字符串。
const str = 'Hello, World!';
console.log(str.charAt(0));
console.log(str.indexOf('World'));
console.log(str.substring(7, 12));
  • ES6:增加了includesstartsWithendsWith等方法,用于更方便地判斷字符串是否包含某個子串、是否以某個子串開頭或結尾。
const str = 'Hello, World!';
console.log(str.includes('World'));
console.log(str.startsWith('Hello'));
console.log(str.endsWith('!'));

數據類型與結構

  • Symbol 類型
  • 一種新的數據類型,Symbol值是唯一的、不可變的,常用于創建對象的唯一屬性鍵,避免屬性名沖突。
  • 在 ES6 之前,JavaScript 的基本數據類型只有numberstringbooleannullundefinedSymbol的引入為對象屬性的管理提供了更強大的方式。
let sy = Symbol("KK");
console.log(sy);   // Symbol(KK)
typeof(sy);        // "symbol"// 相同參數 Symbol() 返回的值不相等
let sy1 = Symbol("kk"); 
sy === sy1;       // false
  • 解構賦值
  • 可以方便地從數組或對象中提取值,并賦值給多個變量。例如,const [a, b, c] = [1, 2, 3]可以將數組中的值分別賦給abcconst { name, age } = { name: 'John', age: 30 }可以從對象中提取nameage屬性并賦值給同名變量。
  • 傳統的賦值方式需要逐個進行賦值操作,解構賦值更加簡潔和直觀,提高了代碼的可讀性和便利性,尤其在處理函數返回多個值或對象屬性較多的情況時優勢明顯。

面向對象編程

  • 類的語法
    • 使用class關鍵字來定義類,包括構造函數、實例方法和靜態方法等。
class Person {constructor(name, age) {this.name = name;this.age = age;}sayHello() {console.log(`Hello, my name is ${this.name}`);}static createPerson(name, age) {return new Person(name, age);}
}

在 ES6 之前,JavaScript 通過構造函數和原型鏈來模擬類和繼承,代碼結構相對復雜且不直觀。class語法使 JavaScript 的面向對象編程更加清晰和易于理解,與其他面向對象編程語言的語法更加相似。

  • 繼承:使用extends關鍵字實現類的繼承,super關鍵字用于調用父類的構造函數和方法。
class Student extends Person {constructor(name, age, grade) {super(name, age);this.grade = grade;}sayHello() {super.sayHello();console.log(`I'm in grade ${this.grade}`);}
}

ES6 之前的繼承實現需要手動操作原型鏈,容易出現一些問題,如原型鏈混亂、子類實例無法正確訪問父類屬性等。extendssuper的使用使繼承的實現更加規范和可靠。

異步編程

  • Promise是一種用于處理異步操作的對象,它代表了一個異步操作的最終完成(或失敗)及其結果值。可以使用then方法來處理成功的結果,catch方法來處理失敗的情況。
  • 在 Promise 出現之前,JavaScript 的異步操作通常使用回調函數來處理,但回調函數容易導致回調地獄,即多層嵌套的回調函數使代碼難以閱讀和維護。Promise 通過鏈式調用的方式使異步操作的代碼更加清晰和易于管理。

  • async/await
    • ES7 引入:基于 Promise 之上的異步函數語法,async函數返回一個 Promise 對象,await只能在async函數內部使用,用于暫停函數執行,等待 Promise 被解決(resolved)或被拒絕(rejected)。
    • 與 Promise 的then鏈式調用相比,async/await使異步代碼看起來更像同步代碼,大大提高了異步代碼的可讀性和可維護性,減少了異步操作帶來的復雜性。

模塊系統

  • ES6 模塊
    • ES6 引入:使用importexport關鍵字來實現模塊的導入和導出。可以將不同的功能封裝在不同的模塊中,通過export暴露需要對外提供的變量、函數、類等,通過import在其他模塊中引入這些內容。
    • 在 ES6 之前,JavaScript 沒有官方的模塊系統,開發者通常使用各種第三方庫(如 CommonJS、AMD 等)來實現模塊功能。ES6 模塊系統提供了標準化的模塊定義和加載方式,使代碼的組織和管理更加規范和高效。

(未完待續)

這些 ES 的特性極大地豐富和增強了 JavaScript 的功能和表現力,使開發者能夠更方便、高效地編寫復雜的前端應用程序。在學習和使用 JavaScript 時,掌握這些 ES 的重要特性是非常關鍵的。

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

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

相關文章

操作主機的管理

1.在AD林范圍內,有哪幾個操作主機角色 架構主機(Schema Master) 功能:負責整個AD林中所有對象和屬性的定義,是唯一可以更新目錄架構的DC。架構更新會從架構主機復制到目錄林中的所有其他域控制器。 作用范圍&#xf…

【Linux】網絡編程

目錄 端口號 網絡字節序 socket編程 接口 sockaddr結構 udp網絡程序 創建套接字 綁定 接收 發送 客戶端需要綁定嗎? 客戶端執行方法 本地環回地址 終端文件 代碼 tcp網絡程序 SOCK_STREAM 監聽 查詢網絡信息 獲取新連接 地址轉換函數 客戶端綁…

Go 語言中的select是做什么的

Go 語言中的 select 是做什么的 在 Go 語言中,select 語句是用于處理多個通道(channel)操作的一種控制結構。它類似于 switch 語句,但專門用于并發編程,允許 Goroutine 在多個通道上等待操作(發送或接收&a…

智慧班牌系統解決方案,SaaS智慧電子班牌云平臺

智慧班牌系統解決方案 系統概述 智慧班牌是智慧校園建設不斷發展的產物,是教育信息化改革的載體。通過智慧班牌可以高效便捷傳遞各種知識信息和通知信息、及時反饋課堂信息、實現班級的透明化管理。智慧班牌將學生平安考勤、異常出勤情況及時反饋至家長、老師&…

利用大模型和聚類算法找出 Excel 文件中重復或相似度高的數據,并使用 FastAPI 進行封裝的詳細方案

以下是一個利用大模型和聚類算法找出 Excel 文件中重復或相似度高的數據,并使用 FastAPI 進行封裝的詳細方案: 方案流程 數據讀取:從 Excel 文件中讀取數據。文本向量化:使用大模型將文本數據轉換為向量表示。聚類分析:運用聚類算法對向量進行分組,將相似度高的數據歸為…

【Docker基礎】容器技術詳解:生命周期、命令與實戰案例

文章目錄 一、什么是容器?二、為什么需要容器三、容器的生命周期容器狀態容器OOM容器異常退出容器異常退出容器暫停 四、容器命令命令清單詳細介紹 五、容器操作案例容器的狀態遷移容器批量操作容器交互模式attached 模式detached 模式interactive 模式 容器 與 宿主…

Laravel 實現 隊列 發送郵件功能

一. 什么是隊列 在構建 Web 應用程序時,你可能需要執行一些任務,例如解析文件,發送郵件,大量的數據計算等等,這些任務在典型的 Web 請求期間需要很長時間才能執行。 慶幸的是,Laravel 可以創建在后臺運行…

flink Shuffle的總結

關于 ** ?5 種 Shuffle 類型** 的區別、使用場景及 Flink 版本支持的總結: * 注意:下面是問AI具體細節與整理學習 1. 核心區別 Shuffle 類型核心特點使用場景Flink 版本支持Pipelined Shuffle流式調度,純內存交換,低延遲(毫秒級…

Git使用與管理

一.基本操作 1.創建本地倉庫 在對應文件目錄下進行: git init 輸入完上面的代碼,所在文件目錄下就會多一個名為 .git 的隱藏文件,該文件是Git用來跟蹤和管理倉庫的。 我們可以使用 tree 命令(注意要先下載tree插件&#xff09…

計算機視覺——深度學習圖像處理中目標檢測平均精度均值(mAP)與其他常用評估指標

概述 平均精度均值(mAP)是目標檢測領域中最為流行且復雜的重要評估指標之一。它廣泛用于綜合總結目標檢測器的性能。許多目標檢測模型會輸出類似以下的參數結果: Average Precision (AP) [ IoU0.50:0.95 | area all | maxDets100 ] 0.3…

C語言中單鏈表操作:查找節點與刪除節點

一. 簡介 前面學習了C語言中創建鏈表節點,向鏈表中插入節點等操作,文章如下: C語言中單向鏈表:創建節點與插入新節點-CSDN博客 本文繼續學習c語言中對鏈表的其他操作,例如在鏈表中查找某個節點,刪除鏈表…

WePY 框架:小程序開發的“Vue式”利器!!!

WePY 框架:小程序開發的“Vue式”利器 🚀 哈嘍,大家好!👋 今天我們要聊聊一個在微信小程序開發中大放異彩的框架——WePY!它是什么?有什么特點?為啥值得一試?別急&#…

什么是微前端?有什么好處?有哪一些方案?

微前端(Micro Frontends) 微前端是一種架構理念,借鑒了微服務的思想,將一個大型的前端應用拆分為多個獨立、自治的子應用,每個子應用可以由不同團隊、使用不同技術棧獨立開發和部署,最終聚合為一個整體產品…

【家政平臺開發(33)】庫存管理模塊開發實戰:從基礎搭建到智能管控

本【家政平臺開發】專欄聚焦家政平臺從 0 到 1 的全流程打造。從前期需求分析,剖析家政行業現狀、挖掘用戶需求與梳理功能要點,到系統設計階段的架構選型、數據庫構建,再到開發階段各模塊逐一實現。涵蓋移動與 PC 端設計、接口開發及性能優化,測試階段多維度保障平臺質量,…

Mysql個人筆記

Mysql個人筆記 sql基礎書寫規則和種類種類書寫規則注釋規則啟動 DDL數據類型數據庫的操作useshowcreatedrop 表的操作useshowcreate創建表復制表 dropalter Mysql的存儲引擎 DMLselectselect語句like(謂詞)where聚合函數:關于nullgroup byexi…

【重裝系統】大白菜自制U盤裝機,備份C盤數據,解決電腦啟動黑屏/藍屏

1. 準備 U 盤 U 盤容量至少 8G,備份 U 盤的數據(后期會格式化) 2. 從微軟官網下載操作系統鏡像 https://www.microsoft.com/zh-cn/software-download/windows11 3. 下載安裝大白菜 https://www.alipan.com/s/33RVnKayUfY 4. 插入 U 盤&#…

各類神經網絡學習:(十)注意力機制(第2/4集),pytorch 中的多維注意力機制、自注意力機制、掩碼自注意力機制、多頭注意力機制

上一篇下一篇注意力機制(第1/4集)待編寫 一、pytorch 中的多維注意力機制: 在 N L P NLP NLP 領域內,上述三個參數都是 向量 , 在 p y t o r c h pytorch pytorch 中參數向量會組成 矩陣 ,方便代碼編寫。…

uni-app初學

文章目錄 1. pages.json 頁面路由2. 圖標3. 全局 CSS4. 首頁4.1 整體框架4.2 完整代碼4.3 輪播圖 swiper4.3.1 image 4.4 公告4.4.1 uni-icons 4.5 分類 uni-row、uni-col4.6 商品列表 小程序開發網址: 注冊小程序賬號 微信開發者工具下載 uniapp 官網 HbuilderX 下…

VBA將Word文檔內容逐行寫入Excel

如果你需要將Word文檔的內容導入Excel工作表來進行數據加工,使用下面的代碼可以實現: Sub ImportWordToExcel()Dim wordApp As Word.ApplicationDim wordDoc As Word.DocumentDim excelSheet As WorksheetDim filePath As VariantDim i As LongDim para…

MySQL運行一段時間后磁盤出現100%讀寫

MySQL運行一段時間后磁盤出現100%讀寫的情況,可能是由多種原因導致的,以下是一些常見原因及解決方法: 可能的原因 1. 磁盤I/O壓力過大[^0^]:數據量過大,數據庫查詢和寫入操作消耗大量I/O資源。索引效率低&#xff0c…