📜  JavaScript | Uint8ClampedArray.from() 方法(1)

📅  最后修改于: 2023-12-03 15:01:39.554000             🧑  作者: Mango

JavaScript | Uint8ClampedArray.from() 方法

介绍

Uint8ClampedArray.from() 是 ECMAScript 2015 (ES6) 引入的新方法,用于创建一个 Uint8ClampedArray 类型数组,从一个类似数组或可迭代对象中提取值。

Uint8ClampedArray 是一个类数组对象,它包含了 8 位无符号整数(0 到 255 之间)的固定长度序列。与普通数组不同的是,Uint8ClampedArray 类型数组在视线外的地方将会被截断到有效范围内。所以,它不支持数组的一些方法,比如 splice() 等。

语法
Uint8ClampedArray.from(source[, mapFn[, thisArg]])
参数
  • source

    必需。源数组或类数组对象,可以是任何可迭代对象。

  • mapFn

    可选。类似于 Array.prototype.map() 函数的回调函数,用于将每个元素转换后放入新的数组中。

  • thisArg

    可选。回调函数 mapFn 中的 this 对象。

返回值

一个新的 Uint8ClampedArray 类型数组。

示例
将字符串转换为 Uint8ClampedArray 类型数组
const str = "Hello world";
const u8cArr = Uint8ClampedArray.from(str, char => char.charCodeAt(0));
console.log(u8cArr);  // 输出: Uint8ClampedArray(11) [72, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]
将数组转换为 Uint8ClampedArray 类型数组
const arr = [10, 20, 30, 40, 50];
const u8cArr = Uint8ClampedArray.from(arr);
console.log(u8cArr);  // 输出: Uint8ClampedArray(5) [10, 20, 30, 40, 50]
将 Generator 对象转换为 Uint8ClampedArray 类型数组
function* genFn() {
  yield 100;
  yield 200;
  yield 300;
}

const u8cArr = Uint8ClampedArray.from(genFn());
console.log(u8cArr);  // 输出: Uint8ClampedArray(3) [100, 200, 255]
注意事项
  • Uint8ClampedArray 类型数组的长度是固定的,不能通过 length 属性进行修改。

  • 如果 mapFn 返回值超出了 0 到 255 的范围,将会被截断为最大值或最小值。如果 mapFn 的返回值不是数字类型,将会被转换成 0

  • 目前,Uint8ClampedArray.from() 方法不能被转换为通用的 Array.from(),一些 JavaScript 引擎可能不支持它。

参考资料