实例分析Array.from(arr)与[…arr]到底有何不同

题目中提到的Array.from(arr)[...arr]都可以将一个类数组对象或可迭代对象转换为一个真正的数组。但是,二者使用方法上却有些微小的差别。下面我将为大家做进一步的解释。

1. Array.from(arr)

1.1 Array.from(arr) 是一个方法

Array.from(arr)可以看成是一个静态方法,也就是说此方法属于Array对象上而不是Array实例上的方法,所以需要通过Array引用来调用。

1.2 可以包含第二个参数

Array.from除了第一个必传参数外,还接收一个可选参数mapFn,其作用是对这个新数组的每个元素进行处理。以下是一个例子:

const arr = [1, 2, 3]

function double(n) {
 return n * 2
}

const newArr = Array.from(arr, double)
console.log(newArr)    // [2, 4, 6]

1.3 转换不可迭代对象

另一个非常强大的用途是将一个不可迭代的对象(具有数字键的对象、字符串,甚至是Set、Map等)转换成一个数组。

以字符串举例:

const str = '123'

console.log(Array.from(str))          // ['1', '2', '3']
console.log(Array.from(str, Number))  // [1, 2, 3]

第二个参数在这里充当了一个转换器,将原本字符串类型的 123 转换为数字类型[1,2,3]

2. [...arr]

2.1 [...arr] 是一种语法

[...arr]是ES6中增加的展开运算符语法,可以将一个可迭代的对象展开为一个由该对象的所有元素组成的数组。

2.2 仅限于可迭代对象

展开运算符语法只适用于可迭代对象,包括具有Symbol.iterator方法的任何对象、字符串、类数组和类似数组的对象(如 arguments 对象)。

以下是一个例子:

const str = 'Hello'
const obj = {a: 1, b: 2}
function* generator() {
    yield 1;
    yield 2;
    yield 3;
}

console.log([...str])                // ['H', 'e', 'l', 'l', 'o']
console.log([...Object.keys(obj)])   // ['a', 'b']
console.log([...generator()])        // [1, 2, 3]

3. Array.from(arr)[...arr] 的区别

  • Array.from(arr)作为方法,实际上是出现在函数名的位置,意味着参数不一定是数组或可迭代对象,并且可以在第二个参数中自定义转换、映射或基本操作。比如可以很容易地扩展出一个从map或set对象取出数据的方法。而 [...arr] 则仅适用于将一个可迭代对象展开成一个数组。

  • Array.from(arr) 提供了一种将字符串转换为数组的方法,特别方便,可以对每个字符进行转换。而 [...arr] 则会直接将字符串拆分成一个个字符,而不会继承字符串的原型方法,例如 toUpperCase(), substr()等,因为展开运算符其实仅仅复制了字符串字符的数组。

综上,Array.from(arr)[...arr]的用途和实现方式都有所不同,并且适用于不同的场景。开发者需要根据实际项目需求来灵活地选择。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:实例分析Array.from(arr)与[…arr]到底有何不同 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • 微信公众号中的JSSDK接入及invalid signature等常见错误问题分析(全面解析)

    微信公众号中的JSSDK接入及invalid signature等常见错误问题分析(全面解析) JSSDK接入 在微信公众号开发中,我们可以通过使用JSSDK来调用微信的各类服务。下面是JSSDK的接入步骤: 在微信公众平台获取 AppID 和 AppSecret 在后端使用 AppID 和 AppSecret 获取 access_token 在前端使用 a…

    node js 2023年6月8日
    00
  • Vue+Node服务器查询Mongo数据库及页面数据传递操作实例分析

    下面我将为你详细讲解“Vue+Node服务器查询Mongo数据库及页面数据传递操作实例分析”的完整攻略。 一. 概述 本攻略主要介绍了如何使用Vue和Node配合查询MongoDB数据库,以及在页面中传递数据的操作。其中Vue用于前端展示,Node用于后端请求处理,MongoDB用于数据的存储和读取。 二. 准备工作 在开始攻略前,确保本机已经安装了以下环境…

    node js 2023年6月8日
    00
  • Node.js高级编程cluster环境及源码调试详解

    Node.js高级编程cluster环境及源码调试详解 本文将详细讲解 Node.js 的 cluster 环境及源码调试,包含以下内容: 理解Cluster Cluster 是 Node.js 的一个核心模块,它允许你创建一组子进程来共享同一个服务器端口,并在每个子进程之间分配工作负载。这就允许我们利用服务器的所有 CPU 核心,以提高 Node.js 应…

    node js 2023年6月8日
    00
  • Node后端Express框架安装及应用

    安装Express框架: 1.首先需要安装Node.js,可以前往Node.js官网下载相应版本的安装包并完成安装。 2.打开命令行工具,输入以下命令安装Express框架: npm install express –save 其中,–save选项将安装的内容添加进package.json文件中,方便后续依赖管理。 3.在项目目录下创建app.js文件,…

    node js 2023年6月8日
    00
  • JS常用跨域方法实现原理解析

    以下是针对“JS常用跨域方法实现原理解析”的完整攻略: 理解同源策略 同源策略是浏览器最核心的一个安全特性,它决定了我们在浏览器中使用 JavaScript 发起网络请求时,具体哪些服务可被访问。同源策略是指执行在一个源(协议 + 域名 + 端口)内的脚本只能获取和操作相同源下的文档或脚本的一部分内容,而访问其他源下的数据则会被浏览器所限制。 例如,我们的网…

    node js 2023年6月8日
    00
  • Node.js实现文件上传的示例

    下面我将为你介绍一下“Node.js实现文件上传的示例”的完整攻略。 什么是文件上传 文件上传是指将本地的文件上传到服务器上的过程。在Web开发中经常要用到文件上传,比如用户上传头像、PDF文件以及其他文档等。 Node.js实现文件上传的示例 Node.js可以很方便地实现文件上传,需要用到第三方模块formidable。下面是实现文件上传的步骤: 步骤1…

    node js 2023年6月8日
    00
  • node使用promise替代回调函数

    下面是“node使用promise替代回调函数”的完整攻略: 什么是Promise Promise 是 ECMAScript 6 黑科技中的一项特性,其实现了异步编程的一种新的编程风格。 在 Node.js 中,许多模块都采用了异步 IO 的方式,要想避免异步调用的“回调地狱”,可以采用 Promise 这种编程模型。 Promise 的基本用法 Promi…

    node js 2023年6月8日
    00
  • nodejs的安装使用与npm的介绍

    Node.js是一个能够在服务器端运行JavaScript的开放源代码,跨平台的运行环境。它是构建在Chromium的V8 JavaScript引擎上的。 安装Node.js 1. Windows环境下的安装 在Windows环境下,你可以直接在Node.js官网(https://nodejs.org/en/)下载Windows安装包,根据安装向导完成安装。…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部