我在javascript中经常遇到“Array-Like Object”这个术语。它是什么 ?它和普通阵列有什么区别?什么是类似数组的对象和普通对象之间的区别?
我在javascript中经常遇到“Array-Like Object”这个术语。它是什么 ?它和普通阵列有什么区别?什么是类似数组的对象和普通对象之间的区别?
它是什么?
一个 目的 有一个 长度 非负面的财产 整数,通常是一些索引属性。例如
var ao1 = {length: 0}, // like []
ao2 = {0: 'foo', 5: 'bar', length: 6}; // like ["foo", undefined × 4, "bar"]
你可以转换 类似数组的对象 他们的 排列 同行使用 Array.prototype.slice
var arr = Array.prototype.slice.call(ao1); // []
它和普通阵列有什么区别?
它不是由...构建的 Array
或者用 数组文字 []
,所以(通常)不会继承 Array.prototype
。该 长度 属性通常也不会自动更新。
ao1 instanceof Array; // false
ao1[0] = 'foo';
ao1.length; // 0, did not update automatically
什么是类似数组的对象和普通对象之间的区别?
没有区别。甚至正常 数组 是 对象 在 JavaScript的
ao1 instanceof Object; // true
[] instanceof Object; // true
有名的 HTMLCollection
和 arguments
是自动创建的类似数组的对象。
一些类似快速的阵列(例如 HTMLCollection
)实数组示例之间的差异:
var realArray = ['value1', 'value2'];
var arrayLike = document.forms; //there are 2 forms in the DOM.
arrayLike.length; // returns 2;
realArray.length; // returns 2;
arrayLike[0]; // returns an element.
realArray[0]; // returns an element. ('value')
arrayLike.join(", "); // returns Uncaught TypeError: arrayLike.join is not a function (also relevant to `concat()`, `includes()` etc.)
realArray.join(", "); // returns "value1, value2"
typeof arrayLike; // returns "object"
typeof realArray; // returns "object"
Array.isArray(arrayLike); //returns "false"
Array.isArray(realArray); //returns "true"
arrayLike.length = 1;
arrayLike.length; //return 2;
realArray.length = 1;
realArray.length; //return 1;
我认为,在ES6中,如果它是可迭代的,那么它就像Array一样(有一个 [Symbol.iterator]
属性)。