【Web】ES6新特性

来源:https://www.cnblogs.com/real-blog/archive/2022/11/02/16852824.html
-Advertisement-
Play Games

ECMAScript簡介 ECMAScript6.0 ,簡稱 ES6 。ECMAScript 是一種由 ECMA 國際通過 ECMA-262 標準化的腳本,為 JavaScript 語言的下一代標準, 在 2015 年 6 月正式發佈。 類比於 Java ,經典程度堪比 JDK 1.8 版本。 但是 ...


ECMAScript簡介

ECMAScript6.0 ,簡稱 ES6 。ECMAScript 是一種由 ECMA 國際通過 ECMA-262 標準化的腳本,為 JavaScript 語言的下一代標準, 在 2015 年 6 月正式發佈。

類比於 Java ,經典程度堪比 JDK 1.8 版本。
但是兩者之間的區別, JDK 是具體實現,而 ES 就相當於 JSR 規範。

JSR,是 Java Specification Requests 的縮寫,意思是 Java 規範提案,是指向 JCP(Java Community Process) 提出新增一個標準化技術規範的正式請求。

從層級上看, ECMAScript 是一種規範/介面,JavaScript 是規範的具體實現。

let關鍵字

  • let不會作用到 {} 外,var 會越域到 {} 外,且 var 聲明的變數有域提升的特性。
  • var 可以多次聲明同一變數,使用 let 則會報錯,只能在作用範圍內聲明一次。
  • var 定義之前可以使用,let 定義之前不可使用,關聯域提升特性。
  • let 的聲明之後不允許改變,相當於 const 聲明的變數。

解構表達式

解構表達式,是一種可以用來簡化變數賦值的新語法。

  • 支持 let arr = [1,2,3]; let [a,b,c] = arr; 語法
    • 該語法的特性,能夠更方便地在變數之間進行值傳遞,屬於數組解構表達式
  • 支持對象解析 const { name: abc, age, language } = person; 語法
    • 該語法可以將一個 person 對象其中的 name 屬性賦值給 abc 對象,也就是將 name 屬性值對應賦值給 abc ,而不是需要一定相同的屬性名稱。
    • 這個過程類似於一種 JsonProperty 的轉換功能,但是不同的是 JsonProperty 註解提供的只是給原對象起一個別名,而不像對象解構表達式是將對象欄位賦值給新的語句。

字元串擴展

在 ES6 中,對於字元串新增了一些擴展。主要是新增部分為字元串 API 以及字元串模板、變數值插入。
字元串 API 新增的主要常用的有:str.startsWith("")str.endsWith("")str.includes("") 幾個。
字元串模板,主要用來輸出一些特定格式的字元串,保留在編輯器中的換行空格等字元。字元串模板的使用方式很簡單,只需要將目標模板使用 包起來即可。
變數值插入,類似於 Java 中的 @Value 註解所需要使用的表達式。格式為 ${} 。我們可以在 { } 中使用變數、表達式、函數,均可以輸出對應的計算結果。

函數優化

在 ES6 中,新增了一些函數的優化。主要有:

  • 函數預設值
# 原始的預設值的寫法
function add1(a, b) {
  b = b | 1
  return a + b
}

# ES6 新增的寫法
function add1(a, b = 2) {
  return a + b
}
  • 不定參數
function fun(...values) {
	console.log(values.length);
}
  • 箭頭函數
var print = obj => console.log(obj);
# 調用
print("abc");

對象優化

對象函數

Object.keys(obj);
Object.values(obj);
Object.entries(obj);
# assign 函數將其他對象添加到目標對象中
Object.assign(target, obj1, obj2);

對象聲明簡寫

# 對象的屬性名和變數名一致,可以直接使用簡寫聲明對象
const obj1 = { age, name };

對象拓展運算符

# 該符號可以將對象的所有屬性取出來,可以用於對象的深拷貝、覆蓋
let person = { name: "Real", age: 20 }
let someone = { ...person}

數組優化

在 ES6 中,數組新增了 Map 和 Reduce 方法。

  • map 方法:接收一個函數,將原數組中的所有元素用這個函數處理後放入新數組後返回。
arr = arr.map(item=> item*2);
  • reduce 方法:為數組中的每個元素執行回調函數,不包含數組中被刪除或者未被賦值初始化的元素。
/**
* 1、previousValue (上一次調用回調返回的值,或者是提供的初始值(initialValue))
* 2、currentValue (數組中當前被處理的元素)
* 3、index (當前元素在數組中的索引)
* 4、array (調用 reduce 的數組)
*/
arr.reduce(callback,[initialValue])

promise非同步編排

<script>
  //1、查出當前用戶信息
  //2、按照當前用戶的id查出他的課程
  //3、按照當前課程id查出分數
  // $.ajax({
  //     url: "mock/user.json",
  //     success(data) {
  //         console.log("查詢用戶:", data);
  //         $.ajax({
  //             url: `mock/user_corse_${data.id}.json`,
  //             success(data) {
  //                 console.log("查詢到課程:", data);
  //                 $.ajax({
  //                     url: `mock/corse_score_${data.id}.json`,
  //                     success(data) {
  //                         console.log("查詢到分數:", data);
  //                     },
  //                     error(error) {
  //                         console.log("出現異常了:" + error);
  //                     }
  //                 });
  //             },
  //             error(error) {
  //                 console.log("出現異常了:" + error);
  //             }
  //         });
  //     },
  //     error(error) {
  //         console.log("出現異常了:" + error);
  //     }
  // });


  //1、Promise可以封裝非同步操作
  // let p = new Promise((resolve, reject) => { //傳入成功解析,失敗拒絕
  //     //1、非同步操作
  //     $.ajax({
  //         url: "mock/user.json",
  //         success: function (data) {
  //             console.log("查詢用戶成功:", data)
  //             resolve(data);
  //         },
  //         error: function (err) {
  //             reject(err);
  //         }
  //     });
  // });

  // p.then((obj) => { //成功以後做什麼
  //     return new Promise((resolve, reject) => {
  //         $.ajax({
  //             url: `mock/user_corse_${obj.id}.json`,
  //             success: function (data) {
  //                 console.log("查詢用戶課程成功:", data)
  //                 resolve(data);
  //             },
  //             error: function (err) {
  //                 reject(err)
  //             }
  //         });
  //     })
  // }).then((data) => { //成功以後乾什麼
  //     console.log("上一步的結果", data)
  //     $.ajax({
  //         url: `mock/corse_score_${data.id}.json`,
  //         success: function (data) {
  //             console.log("查詢課程得分成功:", data)
  //         },
  //         error: function (err) {
  //         }
  //     });
  // })

  function get(url, data) { //自己定義一個方法整合一下
    return new Promise((resolve, reject) => {
      $.ajax({
        url: url,
        data: data,
        success: function (data) {
          resolve(data);
        },
        error: function (err) {
          reject(err)
        }
      })
    });
  }

get("mock/user.json")
  .then((data) => {
    console.log("用戶查詢成功~~~:", data)
    return get(`mock/user_corse_${data.id}.json`);
  })
  .then((data) => {
    console.log("課程查詢成功~~~:", data)
    return get(`mock/corse_score_${data.id}.json`);
  })
  .then((data)=>{
    console.log("課程成績查詢成功~~~:", data)
  })
  .catch((err)=>{ //失敗的話catch
    console.log("出現異常",err)
  });

</script>

模塊化

模塊化就是把代碼進行拆分,方便重覆利用。類似於 Java 中的 import 導包;要使用一個包,必須先導入進來。而 JS 中沒有包的概念,對應的是模塊。
模塊功能主要由兩個命令構成:export 和 import

  • export 命令用於規定模塊的對外介面
  • import 命令用於導入其他模塊提供的功能

export 不僅可以導出對象,還可以導出變數、函數、數組等等一切 JS 中的變數。

  • user.js
var name = "jack"
var age = 21
function add(a,b){
  return a + b;
}
// 導出變數和函數
export {name,age,add}
  • hello.js
// export const util = {
//     sum(a, b) {
//         return a + b;
//     }
// }

// 導出後可以重命名
export default {
  sum(a, b) {
    return a + b;
  }
}
// export {util}

//`export`不僅可以導出對象,一切JS變數都可以導出。比如:基本類型變數、函數、數組、對象。
  • main.js
import abc from "./hello.js"
import {name,add} from "./user.js"

abc.sum(1,2);
console.log(name);
add(1,3);

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Redis雖然是一個記憶體級別的緩存程式,也就是redis是使用記憶體進行數據的緩存的,但是其可以將記憶體的數據按照一定的策略保存到硬碟中,這樣的話就可以實現持久保存的目的;目前的話redis支持的兩種不同方式的數據持久化保存機制,分別是RDB和AOF,這兩種方式的話很類似於MySQL資料庫的dump和二 ...
  • PostgreSQL 高可用資料庫的常見搭建方式主要有兩種,邏輯複製和物理複製,上周已經寫過了關於在Windows環境搭建PostgreSQL邏輯複製的教程,這周來記錄一下 物理複製的搭建方法。 首先介紹一下邏輯複製和物理複製的一些基本區別: 物理複製要求多個實例之間大版本一致,並且操作系統平臺一致 ...
  • GreatSQL社區原創內容未經授權不得隨意使用,轉載請聯繫小編並註明來源。 GreatSQL是MySQL的國產分支版本,使用上與MySQL一致。 介紹 從 MySQL 8.0.4 開始,MySQL 預設身份驗證插件從 mysql_native_password 改為 caching_sha2_pa ...
  • 首發微信公眾號:SQL資料庫運維 原文鏈接:https://mp.weixin.qq.com/s?__biz=MzI1NTQyNzg3MQ==&mid=2247485212&idx=1&sn=450e9e94fa709b5eeff0de371c62072b&chksm=ea37536cdd40da7 ...
  • [Android開發學iOS系列] Auto Layout 內容: 介紹什麼是Auto Layout. 基本使用方法 在代碼中寫約束的方法 Auto Layout的原理 尺寸和優先順序 Auto Layout的使用細則 重要的屬性 StackView Layout Guide Performance ...
  • 例子一: GlobalScope.launch(Dispatchers.Main) { //開啟子協程 withContext(Dispatchers.IO) { for (i in 0 until 1000) { } Log.d("MainActivityXX", "withContext-> t ...
  • 是在此篇博文Viewpager遷移至ViewPager2實現Tab標簽頁面_Code-Porter的博客-CSDN博客的基礎上對一些細節進行了補充,請支持原作者。 使用的編譯軟體是Android Studio 2019 一、使用Androidx的依賴,同時引入TabLayout 進入Module的b ...
  • 當我們使用vuex的時候,時不時能看到“更改Vuex中的store中的狀態唯一辦法就是提交mutations”,但是有沒有試想過,我們不提交mutations其實也能修改state的值?答案是可以的 我們可以直接使用如下方式; this.$store.state.num=666; 其中,這樣修改的話 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...