深入理解ES6 010【學習筆記】

改進的數組功能

new Array()的怪異行為,當構造函數傳入一個數值型的值,那麼數組的length屬性會被設為該值;如果傳入多個值,此時無論這些值是不是數值型的,都會變為數組的元素。這個特性另人困惑,你不可能總是注意傳入數據的類型,所以存在一定的風險。

Array.of()

無論傳多少個參數,不存在單一數值的特例(一個參數且數值型),總是返回包含所有參數的數組。

let items = Array.of(1,2); 
console.log(items.length); //2
console.log(items[0]); // 1
console.log(items[1]); // 2
items = Array.of(2);
console.log(items.length); //1
console.log(items[0]); //2
items = Array.of("2");
console.log(items.length); //1
console.log(items[0]); //"2"

Array.from()

將類數組對象轉成數組對象來使用,Array.from()調用基於arguments對象中的元素創建一個新數組,args是Array的一個實例,包含arguments對象中同位置的相同值。如下:

function doSomthing(){
  var args = Array.from(arguments);
  // 使用args
}
// 可以提供一個映射函數作為Array.from()的第二個參數,這個函數用來將類數組對象中的每一個值轉換成其他形式
// 還有第三個參數,是用來綁定上下文的
function translage(){
  return Array.from(arguments,(value)=>value+1)
}
let numbers = translage(1,2,3)
console.log(numbers) // 2,3,4
// 可以轉換可迭代對象

let numbers = {
  *[Symbol.iterator](){
    yield 1;
    yield 2;
    yield 3;
  }
}
let number2 = Array.from(numbers,(value)=>value+1)
console.log(numbers2) // 2,3,4

所有對象的新方法

  • find() 和 findIndex()方法
  • fill()
  • copyWithin

定型數組

一種用於處理數值類型(正如其名,不是所有類型)數據的專用數組。

定型數組的使用要先創建數據緩衝區

let buffer = new ArrayBuffer(10) // 分配10個節節
console.log(buffer.byteLength) // 10

也以可以使用slice方法分割已有數組緩衝區來創建一個新的,這個slice()方法與數組上的slice()方法很像,傳入開始索引和結束索引作為參數,然後返回一個新的ArrayBuffer實例,新實例由原始數組緩衝區的切片組成。

let buffer = new ArrayBuffer(10)
let buffer2 = buffer.slice(2,6);
console.log(buffer2.byteLength) //2

通過視圖操作數組緩衝區

先創建ArrayBuffer實例,然後再用這個實例來創建新的DataView

let buffer = new ArrayBuffer(10),
view = new DataView(buffer);
// view對象可以訪問緩衝區中所有10個字節,如果提供一個表示比特偏移的數值,那麼這個緩衝區的其中一部分來創建視圖
view = new DataView(buffer,5,2); // 包含位於索引5和6的字符
  • 通過以下幾個屬性可以獲取視圖信息
  • buffer 綁定的數組緩衝區
  • byteOffset 默認是0
  • byteLength

讀取寫入數據

js有8種數值型數據類型,對於其中的每一種,都能在DataView的原型上找到相應的數組緩衝區中寫入數據和讀取數據的方法。這些方法名都以set或get打頭,緊跟著是每種數據類型的縮寫,如下:

  • getInt8(byteOffset,litteEndian)
  • setInt8(byteOffset,litteEndian)
  • getUnit8(byteOffset,litteEndian)
  • setUnit8(byteOffset,litteEndian)
  • ...
let buffer = new ArrayBuffer(10),
view = new DataView(buffer);
view.setInt8(0,5);
view.setInt8(1,-1);
console.log(view.getInt16(0)); //1535
console.log(view.getInt8(0)); //5
console.log(view.getInt8(1)); //-1

定型數組是視圖

  • 定型數組與普通數組的相似之處
  • 差別

主題測試文章,只做測試使用。發佈者:Walker,轉轉請注明出處:https://walker-learn.xyz/archives/4336

(0)
Walker的頭像Walker
上一篇 2025年11月25日 16:00
下一篇 2025年11月25日 15:00

相關推薦

  • 深入理解ES6 004【學習筆記】

    擴展對象的功能 普通對象 具有js對象所有默認內部行為的 特異對象 具有某些與默認行為不符的內部行為 標準對象 es6規範中定義的對象,Array/Date等 內建對象 腳本開始執行時存在於javascript執行環境的對象,所有標準對象都是內建對象 對象字面量語法擴展 屬性初始值的簡寫,當一個對象的屬性與本地變量同名時,不必再寫冒號和值 對象方法的簡寫語法…

    個人 2025年3月8日
    1.4K00
  • TS珠峰 003【學習筆記】

    裝飾器 // 裝飾器 // 只能在類中使用(類本身,類成員使用) // 裝飾器,類的裝飾器,屬性裝飾器,訪問裝飾器 參數裝飾器 // 1. 類型裝飾器 給類進行擴展,也可以返回一個子類 // 先要在tsconfig.json中開啓experimentalDecorators const classDecorator1 = <T extends new …

    個人 2025年3月27日
    1.5K00
  • Go工程師體系課 012【學習筆記】

    Go 中集成 Elasticsearch 1. 客戶端庫選擇 1.1 主流 Go ES 客戶端 olivere/elastic:功能最全面,API 設計優雅,支持 ES 7.x/8.x elastic/go-elasticsearch:官方客戶端,輕量級,更接近原生 REST API go-elasticsearch/elasticsearch:社區維護的官…

    個人 2025年11月25日
    32600
  • Go工程師體系課 protoc-gen-validate【學習筆記】

    protoc-gen-validate 簡介與使用指南 ✅ 甚麼是 protoc-gen-validate protoc-gen-validate(簡稱 PGV)是一個 Protocol Buffers 插件,用於在生成的 Go 代碼中添加結構體字段的驗證邏輯。 它通過在 .proto 文件中添加 validate 規則,自動為每個字段生成驗證代碼,避免你手…

    個人 2025年11月25日
    1.4K00
  • Node深入淺出(聖思園教育) 002【學習筆記】

    node 的包管理機制和加載機制 npm search xxxnpm view xxxnpm install xxx nodejs 文件系統操作的 api Node.js 的 fs 模塊提供同步(Sync)與基於回調/Promise 的異步 API,可以操作本地文件與目錄。日常開發中常用的能力包括讀取、寫入、追加、刪除、遍歷目錄、監聽變化等。以下示例基於 C…

    個人 2025年11月24日
    34500
簡體中文 繁體中文 English