从如何优雅的将类数组对象转化为数组谈起

本文探讨如何优雅地将类数组对象转化为数组,通过分析`call()`、`slice()`和`Array.from()`等方法的原理和使用,结合`Object.values()`,讲解不同转换方式及其适用场景。同时,讨论了这些方法在不同浏览器的兼容性问题。
摘要由CSDN通过智能技术生成

今日研读阮老师的ES6标准入门,读到函数的扩展方法时看到这么一段代码:

let arrayList = {
   
    "0":"a",
    "1":"b",
    "2":"c",
    "length":3
}
var arr = [].slice.call(arrayList) // ["a","b","c"]

很明显,上面代码转化代码的关键就是[].slice.call()这一句了。
鄙人不才,平常在项目里碰到需要解构的json数据时都是直接怼上for/forin硬肛的,现在想想真是羞愧啊,往事不提不提~
阮老师的这个demo勾起了我的兴趣,那么我就从call()讲起。
要理解var arr = [].slice.call(arrayList) // ["a","b","c"]这句代码的意思,你需要有以下三点需要理解:

1. [ ]是什么?
2.slice()函数起到什么作用?
3. call()函数起到什么作用?

先讲第一点。[ ]是什么,J开头的程序员肯定都知道,js里的数组嘛,没什么好说的。值得讲讲的就一点,就是[]与new Array()到底有什么区别?它们到底哪个效率高?[]到底需不需要分配内存?我不做回答,大家可以自行探究。

再讲第二点,slice()函数,我们来看官方MDN定义:

slice() 方法返回一个从开始到结束(不包括结束)选择的数组的一部分浅拷贝到一个新数组对象。且原始数组不会被修改.

这就很明显了,这就是[]对象(js里函数也是一个对象)调用了一下slice()函数嘛,为啥调用它,因为它返回新的数组对象呀。那么问题又来了,是不是只要会返回新的数组对象的函数都可以在这里调用呢?我们暂且先不谈论,先往下讲。

最后说说第三点,call( )函数。我们来看MDN定义:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值