(8)ECMAScript語法詳解


本系列教程目錄Vue3+Element Plus全套學習筆記-目錄大綱


文章目錄

  • 第2章 ECMAScript
    • 2.1 ECMAScript 的發展歷史
    • 2.2 什么是ES6
    • 2.3 ES6語法新特性
      • 2.3.1 變量聲明let
      • 2.3.2 常量聲明
      • 2.3.3 模板字符串
      • 2.3.4 函數默認參數
      • 2.3.5 箭頭函數
      • 2.3.6 對象初始化簡寫
      • 2.3.7 解構
      • 2.3.8 Spread Operator
      • 2.3.9 import 和 export
        • 1)安裝babel
        • 2)使用import和export

第2章 ECMAScript

ECMAScript 是一種由 Ecma 國際(Ecma International,前身為歐洲計算機制造商協會),在標準 ECMA-262 中定義的腳本語言規范。這種語言在萬維網上應用廣泛,它往往被稱為 JavaScript 或 JScript,但實際上后兩者是 ECMA-262 標準的實現和擴展。

這種語言在萬維網上應用廣泛,被視為網頁瀏覽器中的核心語言。ECMAScript 的發展歷程中,經歷了多個版本的更新和演進。下面我們將逐一介紹這些版本。

盡管 JavaScript 和 JScript 與 ECMAScript 兼容,但包含超出 ECMAScript 的功能。

2.1 ECMAScript 的發展歷史

版本發表日期與前版本的差異
11997年6月首版
21998年6月格式修正,以使得其形式與ISO/IEC16262國際標準一致
31999年12月新增強大的正則表達式,更好的詞法作用域鏈處理, 新的控制指令,異常處理,錯誤定義更加明確,數據輸出的格式化及其它改變
4放棄由于關于語言的復雜性出現分歧,第4版本被放棄。 其中的部分成為了第5版本及Harmony的基礎;由ActionScript實現
ES52009年12月新增“嚴格模式(strict mode)”,一個子集用作提供更徹底的錯誤檢查,以避免結構出錯。 澄清了許多第3版本的模糊規范,并適應了與規范不一致的真實世界實現的行為。 增加了部分新功能,如getters及setters,支持JSON以及在對象屬性上更完整的反射
5.12011年6月ECMAScript標5.1版形式上完全一致于國際標準ISO/IEC 16262:2011。
ES62015年6月ECMAScript 2015(ES2015),第 6 版,最早被稱作是 ECMAScript 6(ES6)。 作為最早的 ECMAScript Harmony 版本,也被叫做ES6 Harmony。
72016年6月ECMAScript 2016(ES2016),第 7 版,多個新的概念和語言特性
82017年6月ECMAScript 2017(ES2017),第 8 版,多個新的概念和語言特性
92018年6月ECMAScript 2018 (ES2018),第 9 版,包含了異步循環,生成器,新的正則表達式特性和 rest/spread 語法。
102019年6月ECMAScript 2019 (ES2019),第 10 版
112020年6月ECMAScript 2020 (ES2020),第 11 版
122021年ECMAScript 2021 (ES2021),第 12 版
132022年ECMAScript 2022 (ES2022),第 13 版
142023年ECMAScript 2023 (ES2023),第 14 版

ECMAScript官網:https://ecma-international.org/publications-and-standards/standards/ecma-262/

2.2 什么是ES6

編程語言JavaScript是ECMAScript的實現和擴展 。ECMAScript是由ECMA(一個類似W3C的標準組織)參與進行標準化的語法規范。

ECMAScript標準不定義HTML或CSS的相關功能,也不定義類似DOM(文檔對象模型)的[Web API],這些都在獨立的標準中進行定義。ECMAScript涵蓋了各種環境中JS的使用場景,無論是瀏覽器環境還是類似[node.js]的非瀏覽器環境。

ECMAScript標準的歷史版本分別是1、2、3、5。

那么為什么沒有第4版?其實,在過去確實曾計劃發布提出巨量新特性的第4版,但最終卻因想法太過激進而慘遭廢除(這一版標準中曾經有一個極其復雜的支持泛型和類型推斷的內建靜態類型系統)。

ES4飽受爭議,當標準委員會最終停止開發ES4時,其成員同意發布一個相對謙和的ES5版本,隨后繼續制定一些更具實質性的新特性。這一明確的協商協議最終命名為“Harmony”,因此,ES5規范中包含這樣兩句話:ECMAScript是一門充滿活力的語言,并在不斷進化中。未來版本的規范中將持續進行重要的技術改進。

ECMAScript 6.0(以下簡稱ES6)2015年6月正式發布。它的目標,是使得JavaScript語言可以用來編寫復雜的大型應用程序,成為企業級開發語言。

ES6的特性比較多,在 ES5 發布近 6 年(2009-11 至 2015-6)之后才將其標準化。兩個發布版本之間時間跨度很大,所以ES6中的特性比較多。 在這里列舉幾個常用的:

  • 模塊化
  • 箭頭函數
  • 函數參數默認值
  • 模板字符串
  • 解構賦值
  • 延展操作符
  • 對象屬性簡寫
  • Promise
  • Let與Const

2.3 ES6語法新特性

2.3.1 變量聲明let

我們都是知道在ES6以前,var關鍵字聲明變量。無論聲明在何處,都會被視為聲明在函數的最頂部(不在函數內即在全局作用域的最頂部)。這就是函數變量提升例如

function show(flag){if(flag){var test="hello";}console.log(test);
}show(true)

以上的代碼實際上是:

function show(flag){var test;		//變量提升if(flag){test="hello";}console.log(test);
}show(true)

所以不用關心flag是否為true or false。實際上,無論如何test都會被創建聲明。

接下來ES6主角登場:

我們通常用let和const來聲明,let表示變量、const表示常量。let和const都是塊級作用域。怎么理解這個塊級作用域?在一個函數內部 ,在一個代碼塊內部。看以下代碼

function show(flag){if(flag){// var test="hello";let test='hello';}//在這里訪問不到console.log(test)
}
show(true)

2.3.2 常量聲明

const 用于聲明常量,看以下代碼

//定義常量
const name='xiaohui';//常量不允許重新賦值
name='xiaolan'console.log(name)

2.3.3 模板字符串

es6模板字符簡直是開發者的福音啊,解決了ES5在字符串功能上的痛點。

第一個用途,基本的字符串格式化。將表達式嵌入字符串中進行拼接。用${}來界定。

let str1='xiaolan';
let str2='xiaobiao';//普通拼接方式
console.log(str1+'-hello-'+str2)//ES6 模板字符串
console.log(`${str1}-hello-${str2}`)

第二個用途,在ES5時我們通過反斜杠()來做多行字符串或者字符串一行行拼接。ES6反引號(``)直接搞定。

//ES6之前多行字符串
let str3 = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n\
bbbbbbb\n\
ccccccc'//ES6多行字符串
let str4 =`asdasdasdasd
asdasdasdasd
asdasdsadas`;console.log(str3)
console.log('------------------------')
console.log(str4)

2.3.4 函數默認參數

ES6為參數提供了默認值。在定義函數時便初始化了這個參數,以便在參數沒有被傳遞進去時使用。看例子代碼

function show(num=30){          //給函數參數默認值console.log(num)
}show()      //30
show(50)      //50

2.3.5 箭頭函數

ES6很有意思的一部分就是函數的快捷寫法。也就是箭頭函數。

箭頭函數最直觀的三個特點。

  1. 不需要function關鍵字來創建函數
  2. 省略return關鍵字
  3. 繼承當前上下文的 this 關鍵字

看下面代碼:

function test1(a, b) {return a + b;
}//ES6定義函數
test2 = (a, b) => {return a + b;
}//如果函數中就一句話那么return可以省略
test3 = (a, b) => a + b;console.log(test1(10, 20));
console.log(test2(10, 20));
console.log(test3(10, 20));

2.3.6 對象初始化簡寫

ES5我們對于對象都是以鍵值對的形式書寫,是有可能出現鍵值對重名的。例如

function showBook(name,author){return {name:name,author:author}
}//ES6新寫法:如果key和val一樣的話可以省略
function showBook2(name,author){return {name,author}
}console.log(showBook('《論語》','孔子'))
console.log(showBook2('《道德經》','老子'))

2.3.7 解構

數組和對象是JS中最常用也是最重要表示形式。為了簡化提取信息,ES6新增了解構,這是將一個數據結構分解為更小的部分的過程。

ES5我們提取對象中的信息形式如下

const book = {name: '《孟子》', author: '孟子'
}
const name = book.name;
const book = book.author;
console.log(name + ' --- ' + author);

是不是覺得很熟悉,沒錯,在ES6之前我們就是這樣獲取對象信息的,一個一個獲取。現在,ES6的解構能讓我們從對象或者數組里取出數據存為變量,例如

const book = {name: '《大學》', author: '曾子'
}//ES6之前取值方式
// var name=book.name;
// var author=book.author;//ES6新方式,相當于同時定義了兩個變量,分別取出person中對應的值
var {name, address} = book;console.log(name, author)var nums = [32, 54, 43, 49];
var [num1, num2, num3] = nums;console.log(num1);          //nums[0]
console.log(num2);          //nums[1]
console.log(num3);          //nums[2]

2.3.8 Spread Operator

ES6中另外一個好玩的特性就是Spread Operator【傳播操作符】,也是三個點兒…接下來就展示一下它的用途。 組裝對象或者數組

const books = ['大學', '中庸'];
const books2 = [...books, '論語', '孟子'];
console.log(books2)     // [ '大學', '中庸', '論語', '孟子' ]const user1 = {name: 'xiaohui', password:'admin'}
const user1 = {...info, age: 22,address: '湖北荊州'}
console.log(info2)      // { name: 'xiaohui',password:'admin', age: 22, address: '湖北荊州' }

2.3.9 import 和 export

1)安裝babel

ES6+很多高級功能node是不支持的,就需要使用babel轉換成ES5

(1)babel轉換配置,項目根目錄添加.babelrc 文件

{"presets" : ["es2015"]
}

(2)安裝es6轉換模塊

npm install babel-preset-es2015 --save-dev

(3)全局安裝命令行工具

npm install babel-cli -g

(4)將ES6語法轉換為ES5:

# src: 源代碼目錄
# dist: 轉碼之后的目錄
babel src -d dist
2)使用import和export

import用于導入模塊、export用于導出模塊。

ES6導入、導出的用法比較多樣化,可以選擇自己喜歡的用法來導入導出。

  • 第一種方式:

創建一個demo01文件夾,準備一個demo01.js

let show=function(){console.log("千里之行,始于足下。")
}export {show}            //將方法導出

創建demo02.js,導入demo01

import {fun} from './demo01'       //導入其他模塊的方法fun()       //調用導入進來的方法

將ES6語法轉換為ES5:

babel demo01 -d demo01_dist

執行程序:

node ./demo01_dist/demo02
  • 第二種方式:

修改demo01.js:

export function showContent_01() {console.log('上善若水,水善利萬物而不爭。')
}
export function showContent_02() {console.log('吾生也有涯,而知也無涯。')
}

修改demo02.js:

//只取需要的方法即可,多個方法用逗號分隔
import { showContent_01, showContent_02 } from "./demo01"
showContent_01()
showContent_02()

將ES6語法轉換為ES5:

babel demo01 -d demo01_dist

執行程序:

node ./demo01_dist/demo02
  • 第三種方式:

修改demo01.js:

export default {showContent_01() {console.log('夫唯不爭,故天下莫能與之爭。')},showContent_02() {console.log('知者不言,言者不知。')}
}

修改demo02.js:

import content from "./demo01"
content.showContent_01()
content.showContent_02()

將ES6語法轉換為ES5:

babel demo01 -d demo01_dist

執行程序:

node ./demo01_dist/demo02

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

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

相關文章

Android JNI開發中頭文件引入的常見問題與解決方案?,提示:file not found

Android JNI開發中頭文件引入的常見問題與解決方案 問題場景(新手易犯錯誤) 假設你在開發一個JNI項目,想要實現一個線程安全的隊列(SafeQueue),于是直接在cpp目錄下創建了safe_queue.h文件,并開…

C++靜態與動態聯編區別解析

在 C++ 中,靜態聯編(Static Binding)和動態聯編(Dynamic Binding)是兩種不同的函數調用綁定機制,核心區別在于確定函數調用的時機和多態性的支持。以下是詳細解釋: 1. 靜態聯編(Static Binding) 定義:在編譯階段確定函數調用與具體實現的關系。特點: 由編譯器直接確…

如何批量為多個 Word 文檔添加水印保護

在日常辦公中,Word文檔添加水印是一項重要的操作,特別是在需要保護文件內容的安全性和版權時。雖然Office自帶了添加水印的功能,但當需要一次性給多個Word文檔添加水印時,手動操作顯得非常繁瑣且低效。為了提高效率,可…

【愚公系列】《Python網絡爬蟲從入門到精通》057-分布式爬取中文日報新聞數據

🌟【技術大咖愚公搬代碼:全棧專家的成長之路,你關注的寶藏博主在這里!】🌟 📣開發者圈持續輸出高質量干貨的"愚公精神"踐行者——全網百萬開發者都在追更的頂級技術博主! &#x1f…

Linux系統編程 day9 SIGCHLD and 線程

SIGCHLD信號 只要子進程信號發生改變&#xff0c;就會產生SIGCHLD信號。 借助SIGCHLD信號回收子進程 回收子進程只跟父進程有關。如果不使用循環回收多個子進程&#xff0c;會產生多個僵尸進程&#xff0c;原因是因為這個信號不會循環等待。 #include<stdio.h> #incl…

微信小程序拖拽排序有效果圖

效果圖 .wxml <view class"container" style"--w:{{w}}px;" wx:if"{{location.length}}"><view class"container-item" wx:for"{{list}}" wx:key"index" data-index"{{index}}"style"--…

hadoop三大組件的結構及各自的作用

1 HDFS 1.1功能 HDFS 是 Hadoop 的分布式文件系統&#xff0c;用于存儲和管理海量數據。它具有高容錯性、高吞吐量和可擴展性&#xff0c;能夠在多個節點上存儲和管理大規模數據 1.2架構&#xff1a;采用主從架構&#xff0c;由一個 NameNode 和多個 DataNode 組成。NameNode…

解決jupyter notebook修改路徑下沒有c.NotebookApp.notebook_dir【建議收藏】

文章目錄 一、檢查并解決問題二、重新設置默認路徑創作不易&#xff0c;感謝未來首富們的支持與關注&#xff01; 最近在用jupyter notebook編寫代碼時&#xff0c;更新了一下Scikit-learn的版本&#xff0c;然后重新打開jupyter notebook的時候&#xff0c;我傻眼了&#xff0…

MCP Host、MCP Client、MCP Server全流程實戰

目錄 準備工作 MCP Server 實現 調試工作 MCP Client 實現 MCP Host 配置 第一步:配置支持 function calling的 LLM 第二步:添加MCP Server 一般有兩種方式,第一種json配置,第二種直接是Command形式,我這里采用Command形式 第三步:使用MCP Server 準備工作 安裝…

4.21—4.22學習總結 JavaWeb:HTML-CSS

Web&#xff1a;能夠通過瀏覽器訪問到的網站。 Web標準&#xff1a; HTML&#xff1a; vscode中進行注釋的快捷鍵為ctrl斜線/ h1的字體最大&#xff0c;依次遞減&#xff0c;只存在h1—h6。 超鏈接&#xff1a; 設置字體顏色&#xff1a; 方式三寫一個css文件&#xff0c;將方…

Kaamel Agent: 基于EU AI Act的AI影響評估(AIIA)

1. 引言&#xff1a;安全視角下的AI監管 隨著人工智能技術的快速發展和廣泛應用&#xff0c;AI系統在為社會帶來創新和效率的同時&#xff0c;也引發了諸多關于安全、隱私和合規的擔憂。在這一背景下&#xff0c;全球范圍內涌現出多種監管框架和標準&#xff0c;旨在確保AI系統…

Mongodb分布式文件存儲數據庫

文章目錄 一、MongoDB 簡介基本信息特點內部組件 二、MongoDB 部署1. 安裝依賴2. 解壓部署并配置環境變量3. 修改配置文件以及啟動服務4.數據庫權限管理 三、MongoDB 管理1. 角色權限2. 操作命令用戶管理命令常用命令&#xff08;Mongo4.2.8&#xff09;數據庫相關用戶相關集合…

麒麟V10安裝MySQL8.4

1、下載安裝包 wget https://cdn.mysql.com//Downloads/MySQL-8.4/mysql-8.4.5-1.el7.x86_64.rpm-bundle.tar2、解壓 mkdir -p /opt/mysql tar -xvf mysql-8.4.5-1.el7.x86_64.rpm-bundle.tar -C /opt/mysql3、安裝MySQL 3.1、卸載mariadb rpm -qa | grep mariadb rpm -e m…

Unreal如何使用后處理材質實現一個黑屏漸變效果

文章目錄 前言相機后期處理材質創建材質相機設置動態修改FadeAlpha參數使用示例最后前言 UE5 開發VR ,如何通過PostProcess輕松實現黑屏漸變效果 最簡單的辦法,其實是使用一個半球形模型,遮擋住相機,然后控制這個半球形遮罩的顏色透明度,至少Unity中默認的Tunneling是這么…

其它生成式(對比列表生成式)

一、字典生成式&#xff1a; # keys[name, age, gender] # dic{key:None for key in keys} # print(dic) items[(name, Tom), (age, 18), (gender, male)] res{k:v for k,v in items if k ! gender} print(res) 二、集合生成式&#xff1a; keys[name, age, gender] set1{ke…

健身房管理系統(springboot+ssm+vue+mysql)含運行文檔

健身房管理系統(springbootssmvuemysql)含運行文檔 健身房管理系統是一個全面的解決方案&#xff0c;旨在幫助健身房高效管理其運營。系統提供多種功能模塊&#xff0c;包括會員管理、員工管理、會員卡管理、教練信息管理、解聘管理、健身項目管理、指導項目管理、健身器材管理…

LeetCode 第 262 題全解析:從 SQL 到 Swift 的數據分析實戰

文章目錄 摘要描述題解答案&#xff08;SQL&#xff09;Swift 題解代碼分析代碼示例&#xff08;可運行 Demo&#xff09;示例測試及結果時間復雜度分析空間復雜度分析總結未來展望 摘要 在實際業務中&#xff0c;打車平臺要監控行程的取消率&#xff0c;及時識別服務質量的問…

三生原理與現有密碼學的核心區別?

AI輔助創作&#xff1a; 三生原理與現有密碼學的核心區別 一、?哲學基礎與設計邏輯? ?動態生成 vs 靜態分析? 三生原理以“陰陽動態平衡”為核心&#xff0c;通過參數化生成&#xff08;如素數構造中的陰陽元聯動公式&#xff09;模擬系統演化過程&#xff0c;而現有密碼…

4.19-4.20學習總結 網絡編程+反射+動態代理

網絡編程&#xff1a; IPv6有2的128次方個ip。 端口號&#xff1a; 協議&#xff1a; UDP發送和接收消息&#xff1a; UDP的三種通信方式&#xff1a; 單播&#xff1a;一對一&#xff0c;一個發送端對應一個接收端 創建DatagramSocket對象 組播&#xff1a;一個發送端對應一…

Swiper、樣式結構重用、GridGridItem

今日核心&#xff1a; 容器組件&#xff1a;Swiper、Grid\GridItem樣式&結構重用&#xff1a;Builder、Extend、Styles 相關資源: 圖片素材&#xff1a;&#x1f4ce;day01.zip 1. Swiper 1.1. 適用場景 首先來看看 Swiper 在什么情況下會用到 鏈接 Swiper組件提供滑…