Российский государственный гуманитарный университет
Опубликован: 14.08.2003 | Доступ: свободный | Студентов: 23388 / 4434 | Оценка: 4.00 / 3.90 | Длительность: 10:03:00
Лекция 2:

Типы данных и операторы

< Лекция 1 || Лекция 2: 123 || Лекция 3 >

Массивы

Массивы делятся на встроенные ( document.links[], document.images[] и т.п. - их еще называют коллекциями ) и определяемые пользователем (автором документа). Коллекции будут обсуждаться в следующей лекции. Здесь же мы подробно остановимся на массивах, определяемых пользователем. Для массивов определено несколько методов: join(), reverse(), sort() и другие, а также свойство length, которое позволяет получить число элементов массива.

Для определения массива пользователя существует специальный конструктор Array. Если ему передается единственный аргумент, причем целое неотрицательное число, то создается незаполненный массив соответствующей длины. Если же передается один аргумент, не являющийся числом, либо более одного аргумента, то создается массив, заполненный этими элементами:

a = new Array();
// пустой массив (длины 0)

b = new Array(10);
// массив длины 10

c = new Array(10,'Привет');
// массив из двух элементов: числа и строки

d = [5, 'Тест', 2.71828, 'Число e'];
// краткий способ создать массив из 4 элементов

Элементы массива нумеруются с нуля. Поэтому в последнем примере значение d[0] равно 5, а значение d[1] равно 'Тест'. Как видим, массив может состоять из разнородных элементов. Массивы не могут быть многомерными, однако ничто не мешает завести массив, элементами которого будут тоже массивы.

Метод join()

Метод join() позволяет объединить элементы массива в одну строку. Он является обратным к методу split(), который разрезает объект типа String на куски и составляет из них массив. Кстати, метод split() демонстрирует тот факт, что массив можно получить и без конструктора массива.

Рассмотрим пример преобразования локального URL в глобальный URL, где в качестве адреса сервера будет выступать www.intuit.ru. Пусть в переменной localURL хранится локальный URL некоторого файла:

localURL = "file:///C:/department/internet/js/2/2.html"

Разрежем строку в местах вхождения комбинации символов " :/ ", выполнив команду: b = localURL.split(':/'). Получим массив:

b[0] = "file";
b[1] = "//C";
b[2] = "department/internet/js/2/2.html";

Заменяем 0-й и 1-й элементы на требуемые:

b[0] = "http:";
b[1] = "/www.intuit.ru";

Наконец, склеиваем полученный массив, вставляя косую черту в местах склейки: globalURL = b.join("/"). В итоге мы получаем требуемый глобальный URL - значение globalURL будет равно: http://www.intuit.ru/department/internet/js/2/2.html.

Метод reverse()

Метод reverse() применяется для изменения порядка элементов массива на противоположный. Предположим, массив упорядочен следующим образом:

a = new Array('мать','видит','дочь');

Упорядочим его в обратном порядке, вызвав метод a.reverse(). Тогда новый массив a будет содержать:

a[0]='дочь';
a[1]='видит';
a[2]='мать';

Метод sort()

Метод sort() интерпретирует элементы массива как строковые литералы и сортирует массив в алфавитном (т.н. лексикографическом) порядке. Обратите внимание: метод sort() меняет массив. В предыдущем примере, применив a.sort(), мы получим на выходе:

a[0]='видит';
a[1]='дочь';
a[2]='мать';

Однако, это неудобно, если требуется отсортировать числа, поскольку согласно алфавитному порядку 40 идет раньше чем 5. Для этих целей у метода sort() имеется необязательный аргумент, являющийся именем функции, согласно которой требуется отсортировать массив, т.е. в этом случае вызов метода имеет вид: a.sort(myfunction). Эта функция должна удовлетворять определенным требованиям:

  • у нее должно быть ровно два аргумента;
  • функция должна возвращать число;
  • если первый аргумент функции должен считаться меньшим (большим, равным) чем второй аргумент, то функция должна возвратить отрицательное (положительное, ноль) значение.

Например, если нам требуется сортировать числа, то мы можем описать следующую функцию:

function compar(a,b)
{
 if(a < b)  return -1;
 if(a > b)  return  1;
 if(a == b) return  0;
}

Теперь, если у нас есть массив b = new Array(10,6,300,25,18);, то можно сравнить результаты сортировки без аргумента и с функцией compar в качестве аргумента:

document.write("Алфавитный порядок:<BR>");
document.write(b.sort());
document.write("<BR>Числовой порядок:<BR>");
document.write(b.sort(compar));

В результате выполнения этого кода получим следующее:

Алфавитный порядок:
10,18,25,300,6
Числовой порядок:
6,10,18,25,300

Обратите внимание: метод sort() интерпретирует элементы массива как строки (и производит лексикографическую сортировку), но не преобразует их в строки. Если в массиве были числа, то они числами и останутся. В этом легко убедиться, если в конце последнего примера выполнить команду document.write(b[3]+1): результат будет 26 (т.е. 25+1 ), а не 251 (т.е. "25"+"1" ).

< Лекция 1 || Лекция 2: 123 || Лекция 3 >
Валерий Банатин
Валерий Банатин

function f() { var i=5; k=7; } f(); alert(k);

В примере выдается результат k=7, однако, хоть переменная и не объявлена, она внутри функции, т.е. локальная и не должна быть видима, или вторая и последующие все-таки становятся глобальными?

Дамир Кантюков
Дамир Кантюков

Изучаю курс введение в JavaScript. 4 уроке есть код, где метод присвоен переменной, почему у меня не работает, браузер гугл:

<HTML><HEAD> <SCRIPT> wid = window.open('','','width=750,height=100,status=yes'); wid.document.open(); R = wid.document.write; R('<HTML><HEAD><SCRIPT>var t;<\/SCRIPT></HEAD>'); R('<BODY><H1>Новое окно</H1></BODY></HTML>'); wid.document.close(); </SCRIPT> </HEAD> <BODY> <A HREF="javascript: wid.t=window.prompt('Новое состояние:',''); wid.document.write(wid.t); wid.focus(); void(0);" >Изменим значение переменной t в новом окне</A> </BODY></HTML>