Что это?
Немногие знают что в JavaScript есть такая сущность как Array-Like Objects.
То есть все знают что есть такие вещи как document.images, document.getElementsByTageName, arguments в контексте вызова функции, и пр…
Но не все знают как эту сущность можно использовать, например — можно приводить такие сущности к полноценным массивам(через копирование), со всеми вытекающими возможностями.
Обычно Array-Like Object отличает «Object» в виде конструктора, и length — который наследуется по прототипу(непонятно причем откуда — для меня пока это остается загадкой) :)
К конкретике:
Минусы:
Да это копия объекта, что влияет на расходование памяти, естественно.
Плюсы:
Можно избегать больших циклов таким образом, если нужна какая-то трансформация над Array-Like Object-ом.
Типа экономия на CPU
Резюме:
Применять вдумчиво :)
Немногие знают что в JavaScript есть такая сущность как Array-Like Objects.
То есть все знают что есть такие вещи как document.images, document.getElementsByTageName, arguments в контексте вызова функции, и пр…
Но не все знают как эту сущность можно использовать, например — можно приводить такие сущности к полноценным массивам(через копирование), со всеми вытекающими возможностями.
Обычно Array-Like Object отличает «Object» в виде конструктора, и length — который наследуется по прототипу(непонятно причем откуда — для меня пока это остается загадкой) :)
К конкретике:
// Функция копирования с преобразованием var cloneAsArray = function(arrayLikeObject) { var isArrayLikeObject = ( typeof arrayLikeObject === 'object' && typeof arrayLikeObject.length === 'number' ); if (isArrayLikeObject) { return Array.prototype.slice.call(arrayLikeObject) } }; // Пример использования var testFuction = function() { // Надо получить во внутреннюю функцию все переданные аргументы кроме первого массивом var _args = cloneAsArray(arguments).slice(1); return _args; } console.log(testFuction(7,1,2,3,4))
Минусы:
Да это копия объекта, что влияет на расходование памяти, естественно.
Плюсы:
Можно избегать больших циклов таким образом, если нужна какая-то трансформация над Array-Like Object-ом.
Типа экономия на CPU
Резюме:
Применять вдумчиво :)