很早以前我就知道可以把 arguments 转化为数组:[].slice.call(arguments),因为
arguments 是个类数组对象,所以才可以这么用。但是我一直不清楚什么叫做类数组对象( array-like objects)
今天看 Effective JavaScript 就有一节是专门讲这个的,感觉真是太拽了。
先看我写的一些示例代码:
复制代码 代码如下:
a = "hello"
[].map.call(a, (e) -> e.toUpperCase()) # => [ 'H', 'E', 'L', 'L', 'O' ]
[].reduceRight.call(a, (acc, e) -> acc + e) # => 'olleh'
b = {1: "a", 2: "b", 4: "c", length: 6}
[].reduce.call(b, (acc, e) -> acc + e) # => 'abc'
前面那几个是操作字符串的,嗯,字符串也可以看成类数组对象。但是后面那个 b 对象居然
也是类数组对象。
看书上的解释:
复制代码 代码如下:
So what exactly makes an object “array-like”"codetitle">复制代码 代码如下:
b = {1: "a", 2: "b", 4: "c", length: 3}
[].reduce.call(b, (acc, e) -> acc + e) # => 'ab'
嗯,就不对了,成了'ab' 了,因为违反了规则2:length 属性是3,
最大索引值是4要比 length 属性大了。所以表现的不正常了。
太强大了,好像只是定义了一个接口,只要符合这个接口,就可以利用数组的所有方法。
其实不是可以利用所有方法,Array.prototype.concat
是不能用的,因为它是把两个数组连接起来,你不是数组肯定是没法用它的。
还有一个小问题是,字符串创建以后是不可变的(immutable),所以你怎么折腾它都是不可变的。
但是这本书根本就没有解释为什么是符合这两个条件就可以看成类数组对象,另外这本书的作者
是那个什么 ECMAScript 委员会的成员,所以基本还是可信的。至于为什么符合这两个条件就可以看成是类数组对象,我也不知道,谷歌搜了半天也没看到什么合理的解释。
以上所述就是本文的全部内容了,希望大家能够喜欢。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- s14全球总决赛WBG战队成员有哪些 2024世界赛WBG成员名单一览
- s14全球总决赛GEN战队成员有哪些 2024世界赛GEN成员名单一览
- s14全球总决赛BLG战队成员有哪些 2024世界赛BLG成员名单一览
- 陈思安2012-今生的爱[豪记][WAV+CUE]
- 崔健王虹1990-同名专辑(2006新世纪复刻版)[WAV+CUE]
- 陈粒2024-乌有乡地图【WAV】
- 玩家自制《黑神话:悟空》鹤仙人和四妹后续:感觉不像假的
- 唐尼拒绝自己被ai化:哪怕我死了 我也有律师团起诉你
- 《怪猎荒野》太刀实战木桶演示:居合登龙一气呵成
- 群星《高清紫水晶·滴答传情 STS+HD》[WAV整轨][484M]
- 《张学友66首单曲母带合集》[WAV][9.2G]
- 《车载HIFI音乐最新整理》[MP3/DTS][46G]
- 陈随意.2024-我若放袂记【豪记】【WAV+CUE】
- 群星.2013-林振强·依然爱不完101系列6CD【环球】【WAV+CUE】
- 刘小慧.1995-寂寞都有罪【BMG】【WAV+CUE】