Например есть такой объект как arguments
доступный внутри любой функции.
Пожалуйста объясните два этих пункта.
Псевдомассив - это объект, структура которого совпадает со структурой массива (т.е. он хранит элементы в индексах от 0 до length-1), но при этом он не обладает методами, свойственными полноценным массивам из-за отличий в прототипе.
Сделать свой псевдомассив довольно просто:
var a = {0 : 'foo', 1: 'bar', length: 2};
Теперь a
- псевдомассив из 2х элементов. К ним можно обращаться по индексам - a[0]
, a[1]
- но у него нет таких методов как sort
, slice
, concat
, forEach
. JSON-сериализатор также сериализует его не как массив, а как объект.
В стандартной библиотеке javascript единственным классом псевдомассивов является Arguments, который представлен специальным объектом arguments в каждой регулярной функции.
Также в браузерном javascript псевдомассивами являются экземпляры классов NodeList, HTMLCollection и подобных, возвращаемые некоторыми функциями для работы с DOM, такими как document.getElementsByXXX()
.
Любую функцию, работающую с массивом, можно применить к псевдомассиву при помощи call:
a.sort(); // Ошибка: в псевдомассиве нет метода sort
Array.prototype.sort.call(a); // А вот так - работает
[].sort.call(a); // И так тоже работает
Также псевдомассив можно превратить в нормальный массив при помощи slice:
Array.prototype.slice.call(a); // ["foo", "bar"]
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Столкнулся в этом примере с синтаксисом, который раньше не встречал:
Нужно передать JSON с ангуляра, вот набросок кода:
Есть код, который принимает массив и должен вернуть отсортированный массив из двух элементов, первый - это наименьшее, второй наибольшее...