在Javascript中遇到类似于Array的对象非常常见,这些对象与Array类型中的构建有一些相似之处,但没有它的所有方法或功能。因此,有一些技巧可以将类似Array的对象转换为“真正的”数组,以便进一步操作。
Javascript: The Definitive Guide中甚至提到了这一点。
问题是为什么这种模式如此常见?为什么不在所有这些情况下更喜欢内置的Array类型?
答案 0 :(得分:7)
嗯,谈到核心 Javascript对象,arguments
就是一个很好的例子。
在这种情况下,它从一开始就是类似于数组的对象,已经作为一个简单的对象出现在ECMAScript第1版规范中。
为什么呢?我认为当时只有四种内置的Array
方法,也许设计师并不认为它过多,后来提出了改变,但微软(TC39委员会的一部分)没有批准了这一变化,对打破网络的恐惧一直存在。
现在转到主机对象,DOM,NodeLists
出现在我的脑海中,我认为由于动态行为,他们不想使用原生的Array
类型这些对象。
NodeLists
通常是 live 对象,它们的结构反映了对底层DOM结构的任何更改......
我个人喜欢数组对象,因为它们非常轻量级,在ECMAScript 5之前,核心方法有很多限制,关于用户定义的类似数组的对象的使用。
例如,在ECMAScript< = 3中,函数对象的apply
方法只允许实数数组或参数对象作为其第二个参数,现在在ES5中,以下是可能的:
var arrayLike = {0: 'hello ', 1:'world', length:2};
(function (a,b) { alert(a+b); }).apply(null, arrayLike);
另见: