JavaScript 里的类数组对象
曾经,我通过一种简单的方法将 arguments 转化为数组——使用 [].slice.call(arguments)。我一直知道 arguments 是一个类数组对象,但一直不清楚什么叫做类数组对象。今天在阅读 Effective JavaScript 时,终于找到了答案。
让我们通过一些示例代码来直观感受类数组对象的概念。比如,字符串也可以被视为类数组对象。以下代码展示了如何使用数组的 map 和 reduceRight 方法来操作字符串:
```javascript
a = "hello"
[].map.call(a, (e) -> e.toUpperCase()) // 结果:[ 'H', 'E', 'L', 'L', 'O' ]
[].reduceRight.call(a, (a, e) -> a + e) // 结果:'olleh'
```
那么,什么是类数组对象呢?其实,只要一个对象满足以下两个基本条件,就可以被视为类数组对象:
1. 拥有在 0 到 2^32 - 1 范围内的正整数 length 属性。
2. length 属性的值大于对象的最大索引值。这里的索引是指对象的属性的整数键。
例如,arguments、字符串以及某些自定义对象(如 {1: "a", 2: "b", 4: "c", length: 6})都可以被视为类数组对象。因为它们都符合上述规则。
有一些细节需要注意。例如,如果对象的 length 属性值小于其最大索引值(如 {1: "a", 2: "b", 4: "c", length: 3}),那么这个对象就不能完全模拟数组的行为。虽然类数组对象可以使用大部分数组方法,但并不是所有方法都可以使用,比如 Array.prototype.concat 方法就无法在类数组对象上使用。
值得注意的是,字符串在 JavaScript 中是不可变的(immutable)。无论你怎么操作,字符串的内容都不会发生改变。
Effective JavaScript 的作者作为 ECMAScript 委员会的成员,其解释具有一定的权威性。对于为什么符合这两个条件就可以被视为类数组对象,即便是这本书也没有给出详细的解释。关于这一点,我尚未在谷歌上找到合理的解答。
本文旨在向大家介绍 JavaScript 中的类数组对象及其相关概念。希望你喜欢这篇文章,并能在其中收获到有价值的信息。如果你对类数组对象还有更深入的了解或疑问,欢迎与我交流。以上就是本文的全部内容了。
编程语言
- JavaScript 里的类数组对象
- Yii中使用PHPExcel导出Excel的方法
- js replace替换字符串同时替换多个方法
- php使用flock阻塞写入文件和非阻塞写入文件的实例
- 用js判断是否为360浏览器的实现代码
- sqlserver数据库最大Id冲突问题解决方法之一
- mysql 5.7.13 winx64安装配置方法图文教程(win10)
- addeventlistener监听scroll跟touch(实例讲解)
- 简单谈谈MySQL中的int(m)
- jQuery使用fadein方法实现渐出效果实例
- javascript读取文本节点方法小结
- Js通过AES加密后PHP用Openssl解密的方法
- php的ZipArchive类用法实例
- PHP读取文件内容后清空文件示例代码
- jQuery将所有被选中的checkbox某个属性值连接成字符
- JavaScript数据结构之二叉树的遍历算法示例