ES 2023新特性速解

来源:https://www.cnblogs.com/observer-csh/archive/2023/09/18/17710468.html
-Advertisement-
Play Games

ES 2023新特性速解 一、新增數組方法 操作數組的方法 Array.prototype.toSorted(compareFn) //返回一個新數組,其中元素按升序排序,而不改變原始數組。 Array.prototype.toReversed() //返回一個新數組,該數組的元素順序被反轉,但不改 ...


ES 2023新特性速解

一、新增數組方法

操作數組的方法

Array.prototype.toSorted(compareFn)		//返回一個新數組,其中元素按升序排序,而不改變原始數組。
Array.prototype.toReversed()	//返回一個新數組,該數組的元素順序被反轉,但不改變原始數組。
Array.prototype.toSpliced(start,deleteCount,item1...,itemN)		//返回一個新數組,在給定索引處刪除和/或替換了一些元素,而不改變原始數組。

新增的這三個數組方法分別對標以下原有的以下三個方法,它們與原先方法的區別就是:執行它們並不會影響原先的數組

Array.prototype.sort(compareFn)		
Array.prototype.reverse()
Array.prototype.splice(start,deleteCount,item1...,itemN)

toSorted

compareFn:指定一個定義排序順序的函數。如果省略,則將數組元素轉換為字元串,然後根據每個字元的 Unicode 碼位值進行排序。

compareFn(a, b) 返回值 排序順序
> 0 ab後,如[b, a]
< 0 ab前,如[a, b]
=== 0 保持 ab 原來的順序
const arr = [5,7,8,61,24,32,42,35]
//不傳入參數
const sortArr1 = arr.toSorted()
//傳入箭頭函數 	a:比較的第一個元素,b:比較的第二個元素
const sortArr2 = arr.toSorted((a,b)=>a-b)

console.log(arr)			//[5, 7, 8, 61, 24, 32, 42, 35]
console.log(sortArr1)		//[24, 32, 35, 42, 5, 61, 7, 8]
console.log(sortArr2)		//[5, 7, 8, 24, 32, 35, 42, 61]

toReversed

const arr = [5,7,8,61,24,32,42,35]

const reverseArr = arr.toReversed()

console.log(arr)			//[5, 7, 8, 61, 24, 32, 42, 35]
console.log(reverseArr) 	//[35, 42, 32, 24, 61, 8, 7, 5]

toSpliced

start

從 0 開始計算的索引,表示要開始改變數組的位置,它會被轉換為整數

  • 如果 start < 0,則從數組末尾開始計數,使用 start + array.length
  • 如果 start < -array.length 或者省略了 start,則使用 0
  • 如果 start >= array.length,不會刪除任何元素,但該方法將表現為添加元素的函數,添加提供的所有元素。

deleteCount 可選

一個整數,指示數組中要從 start 刪除的元素數量。

如果 deleteCount 被省略了,或者如果它的值大於或等於由 start 指定的位置到數組末尾的元素數量,將會刪除從 start 到數組末尾的所有元素。但是,如果你想要傳遞任何 itemN 參數,則應向 deleteCount 傳遞 Infinity 值,以刪除 start 之後的所有元素,因為顯式的 undefined轉換0

如果 deleteCount0 或者負數,則不會刪除元素。在這種情況下,你應該指定至少一個新元素(見下文)。

item1, …, itemN 可選

元素將從 start 開始添加到數組當中。

如果你沒有指定任何元素,toSpliced() 只會從數組中刪除元素。

const arr = [5,7,8,61,24,32,42,35]
//插入元素
const insertArr = arr.toSpliced(0,0,7)
//刪除元素
const deleteArr = arr.toSpliced(0,1)

//替換元素
const replaceArr = arr.toSpliced(0,1,7)

console.log(arr)			//[5, 7, 8, 61, 24, 32, 42, 35]
console.log(insertArr) 		//[7, 5, 7, 8, 61, 24, 32, 42, 35]
console.log(deleteArr) 		//[7, 8, 61, 24, 32, 42, 35]
console.log(replaceArr) 	//[7, 7, 8, 61, 24, 32, 42, 35]

瀏覽器相容性

操作數組方法

查找數組元素的方法

Array.prototype.findLast(compareFn)		//方法反向迭代數組,並返回滿足提供的測試函數的第一個元素的值。如果沒有找到對應元素,則返回 undefined。
Array.prototype.findLastIndex()		//方法反向迭代數組,並返回滿足提供的測試函數的第一個元素的下標索引。如果沒有找到對應元素,則返回 undefined。

callbackFn

數組中測試元素的函數。回調應該返回一個真值,表示已找到匹配的元素,否則返回一個假值。函數在被調用時會傳遞以下參數:

  • element

    當前遍歷到的元素。

  • index

    當前遍歷到的元素的索引(位置)。

  • array

    調用 findLast() 的數組本身。

findLast

const arr = [5,7,8,61,24,32,42,35]

console.log(arr.findLast(a=>a === 5))

findLastIndex

const arr = [5,7,8,61,24,5,32,42,35]

console.log(arr.findIndex(a=>a === 5))	//0

console.log(arr.findLastIndex(a=>a === 5))	//5

瀏覽器相容性

數組查找方法

二、WeakMap支持鍵值類型新增

新增Sybmol類型來作為WeakMap的Key,助於對象被垃圾收集

const symbol= Symbol('foo')

const weakMap = new WeakMap()

weakMap.set(symbol,51)

weakMap.get(symbol) //51

瀏覽器相容性

symbol

symbol02

三、Hashbang 語法

Hashbang 註釋是一種特殊的註釋語法,其行為與單行註釋 (//) 完全一樣,只是它以 #! 開頭,並且只在腳本或模塊的最開始處有效。註意,#! 標誌之前不能有任何空白字元。註釋由 #! 之後的所有字元組成直到第一行的末尾;只允許有一條這樣的註釋。JavaScript 中的 hashbang 註釋類似於 Unix 中的 shebang,它提供了一個特定的 JavaScript 解釋器的路徑,用它來執行這個腳本。

// 寫在腳本文件第一行
#!/usr/bin/env node
'use strict';
console.log(1);


// 寫在模塊文件第一行
#!/usr/bin/env node
export {};
console.log(1);

這樣就可以直接運行腳本代碼了

# 以前執行腳本
node demo.js


# 有了 hashbang 之後執行腳本
./demo.js

只有當腳本直接在 shell 中運行時,Hashbang 語法才有語意意義,其他環境下 JavaScript 解釋器會把它視為普通註釋。

參考文檔地址:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/toSpliced


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

-Advertisement-
Play Games
更多相關文章
  • UUID(通用唯一識別碼)是由32個十六進位數組成的無序字元串,通過一定的演算法計算出來。為了保證其唯一性,UUID規範定義了包括網卡MAC地址、時間戳、名字空間(Namespace)、隨機或偽隨機數、時序等元素,以及從這些元素生成UUID的演算法。一般來說,演算法可以保證任何地方產生的任意一個UUID都... ...
  • Redis是游戲資料庫重要選型之一,華為雲GaussDB(for Redis)能及時上報用戶下線行為,被廣泛應用於排行榜等多種業務場景。 ...
  • Ubuntu20.04安裝Postgres主從備份 一.查看可安裝的Postgres包 #列出相關的軟體包,這裡安裝的是14版本 apt list | grep -w postgresql-14 | tail -1 #下載Postgres apt install -y postgresql-14/f ...
  • 基於OpenHarmony和華為雲平臺打造的智能家居設備,分別為智能門鎖,儲物精靈 NFC版,儲物精靈Pro版三個設備。 ...
  • 之前在 《iOS16新特性:靈動島適配開發與到家業務場景結合的探索實踐》 里介紹了iOS16新的特性:實時更新(Live Activity)中靈動島的適配流程,但其實除了靈動島的展示樣式,Live Activity還有一種非常實用的應用場景,那就是鎖屏界面實時狀態更新: ...
  • 前端遠程調試方案 Chii 的使用經驗分享 Chii 是與 weinre 一樣的遠程調試工具 ,主要是將 web inspector 替換為最新的 chrome devtools frontend 監控列表頁面可以看到網站的標題鏈接,IP,useragent,可以快速定位調試頁面,監控頁信息完善,支 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 JavaScript 語言的內核足夠大,導致我們很容易誤解它的某些部分是如何工作的。我最近重構了一些使用 every ()方法的代碼,並且發現我並不真正理解every()的邏輯。在我看來,我認為回調函數必須被調用並返回 true的時候ev ...
  • 今天在維護優化公司中台項目時,發現路由的文件配置非常多非常亂,只要只中大型項目,都會進入很多的路由頁面,規範一點的公司還會吧路由進行模塊化導入,但是依然存在很多文件夾的和手動導入的問題。 於是我想到了我之前使用vuex時進行的模塊化自動導入js文件,能不能使用到自動導入.vue文件中去,答案是可以! ...
一周排行
    -Advertisement-
    Play Games
  • 最近做項目過程中,使用到了海康相機,官方只提供了C/C++的SDK,沒有搜尋到一個合適的封裝了的C#庫,故自己動手,簡單的封裝了一下,方便大家也方便自己使用和二次開發 ...
  • 前言 MediatR 是 .NET 下的一個實現消息傳遞的庫,輕量級、簡潔高效,用於實現進程內的消息傳遞機制。它基於中介者設計模式,支持請求/響應、命令、查詢、通知和事件等多種消息傳遞模式。通過泛型支持,MediatR 可以智能地調度不同類型的消息,非常適合用於領域事件處理。 在本文中,將通過一個簡 ...
  • 前言 今天給大家推薦一個超實用的開源項目《.NET 7 + Vue 許可權管理系統 小白快速上手》,DncZeus的願景就是做一個.NET 領域小白也能上手的簡易、通用的後臺許可權管理模板系統基礎框架。 不管你是技術小白還是技術大佬或者是不懂前端Vue 的新手,這個項目可以快速上手讓我們從0到1,搭建自 ...
  • 第1章:WPF概述 本章目標 瞭解Windows圖形演化 瞭解WPF高級API 瞭解解析度無關性概念 瞭解WPF體繫結構 瞭解WPF 4.5 WPF概述 ​ 歡迎使用 Windows Presentation Foundation (WPF) 桌面指南,這是一個與解析度無關的 UI 框架,使用基於矢 ...
  • 在日常開發中,並不是所有的功能都是用戶可見的,還在一些背後默默支持的程式,這些程式通常以服務的形式出現,統稱為輔助角色服務。今天以一個簡單的小例子,簡述基於.NET開發輔助角色服務的相關內容,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 第3章:佈局 本章目標 理解佈局的原則 理解佈局的過程 理解佈局的容器 掌握各類佈局容器的運用 理解 WPF 中的佈局 WPF 佈局原則 ​ WPF 視窗只能包含單個元素。為在WPF 視窗中放置多個元素並創建更貼近實用的用戶男面,需要在視窗上放置一個容器,然後在這個容器中添加其他元素。造成這一限制的 ...
  • 前言 在平時項目開發中,定時任務調度是一項重要的功能,廣泛應用於後臺作業、計劃任務和自動化腳本等模塊。 FreeScheduler 是一款輕量級且功能強大的定時任務調度庫,它支持臨時的延時任務和重覆迴圈任務(可持久化),能夠按秒、每天/每周/每月固定時間或自定義間隔執行(CRON 表達式)。 此外 ...
  • 目錄Blazor 組件基礎路由導航參數組件參數路由參數生命周期事件狀態更改組件事件 Blazor 組件 基礎 新建一個項目命名為 MyComponents ,項目模板的交互類型選 Auto ,其它保持預設選項: 客戶端組件 (Auto/WebAssembly): 最終解決方案裡面會有兩個項目:伺服器 ...
  • 先看一下效果吧: isChecked = false 的時候的效果 isChecked = true 的時候的效果 然後我們來實現一下這個效果吧 第一步:創建一個空的wpf項目; 第二步:在項目裡面添加一個checkbox <Grid> <CheckBox HorizontalAlignment=" ...
  • 在編寫上位機軟體時,需要經常處理命令拼接與其他設備進行通信,通常對不同的命令封裝成不同的方法,擴展稍許麻煩。 本次擬以特性方式實現,以兼顧維護性與擴展性。 思想: 一種命令對應一個類,其類中的各個屬性對應各個命令段,通過特性的方式,實現其在這包數據命令中的位置、大端或小端及其轉換為對應的目標類型; ...