Array.from(arr)和[...arr]的区别
1、对于数组类型的数据,Array.from(arr)和[...arr]都能实现深拷贝的效果。
2、对于类数组对象,Array.from(arr)和[...arr]也都能将其转化为数组,如下图。
3、类数组对象的特点有以下四点:1.有数字索引2.有长度3.是个对象4.能被迭代展开我们刚刚获取的pList 这个类数组对象,可以很清楚的看到这4个特点。
4、对于类数组对象的前3个特性,我们都很熟悉,但是对于第蚵播噍疸四个特性,能被迭代应该如何理解呢?继续展开,我们可以看到原型链上有一邗锒凳审个[Symbol.iterator]属性指向该对象的默认迭代器方法。为了用实例看出2种方法的区别,我们先手动创建一个带迭代的对象。
5、根据类数组对象的特点,声明一个对象,但是暂时没有迭代器属性和迭代器方法。然后分别用Array.from(arr)和[...arr]输出一下结果,发现[...arr]会报错。
6、接下来写一个迭代器,可以参考es6教程中的迭代器篇。然后再用Array.from(arr)和[...arr]输出一下结果,发现这回都能正常输出。因此Array.from烫喇霰嘴(arr)和[...arr]的区别就是在转换类数组对象时,如果不含迭代器属性和方法,那么[...arr]这种转换方法会报错!
7、而报错的根本原因就是:对于那些没有部署 Iterator 接口的类似数组的对象,扩展运算符就无法将其转为真正的数组。
声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
阅读量:54
阅读量:25
阅读量:65
阅读量:92
阅读量:62