MST

星途 面试题库

面试题:JavaScript 中类数组对象如何转化为真正数组及性能影响

在 JavaScript 中,有一个类数组对象 `{0: 'a', 1: 'b', length: 2}`,请列举至少两种方法将其转化为真正的数组,并简要说明每种方法在性能方面的特点。
44.1万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
  1. 使用 Array.from()
    • 代码示例
const arrayLike = {0: 'a', 1: 'b', length: 2};
const arr = Array.from(arrayLike);
console.log(arr); 
- **性能特点**:`Array.from()` 适用于各种类数组对象,并且支持映射函数。性能上,它是线性时间复杂度,在处理大型类数组对象时,性能相对稳定,因为它会遍历类数组对象的所有元素。

2. 使用扩展运算符 (...) - 代码示例

const arrayLike = {0: 'a', 1: 'b', length: 2};
const arr = [...arrayLike];
console.log(arr); 
- **性能特点**:扩展运算符在简单场景下简洁高效。对于小型类数组对象,性能表现优秀,因为其操作较为直接。但在处理大型类数组对象时,可能会因为创建新数组和复制元素等操作,性能略逊于 `Array.from()`,不过差距通常不明显。

3. 使用 Array.prototype.slice.call() - 代码示例

const arrayLike = {0: 'a', 1: 'b', length: 2};
const arr = Array.prototype.slice.call(arrayLike);
console.log(arr); 
- **性能特点**:这种方法兼容性好,能在较旧的 JavaScript 环境中使用。性能方面,它也是线性时间复杂度,与 `Array.from()` 类似,但由于涉及到函数调用的开销,在现代 JavaScript 引擎下,性能可能略低于 `Array.from()` 和扩展运算符。