ЛУЧШИЙ САЙТ ДЛЯ РАЗРАБОТЧИКОВ
×

JavaScript учебник

JS HOME JS Introduction JS Where To JS Output JS Statements JS Syntax JS Comments JS Variables JS Operators JS Arithmetic JS Assignment JS Data Types JS Functions JS Objects JS Scope JS Events JS Strings JS String Methods JS Numbers JS Number Methods JS Arrays JS Array Methods JS Array Sort JS Array Iteration JS Dates JS Date Formats JS Date Get Methods JS Date Set Methods JS Math JS Random JS Booleans JS Comparisons JS Conditions JS Switch JS Loop For JS Loop While JS Break JS Type Conversion JS Bitwise JS RegExp JS Errors JS Debugging JS Hoisting JS Strict Mode JS this Keyword JS Style Guide JS Best Practices JS Mistakes JS Performance JS Reserved Words JS Versions JS Version ES5 JS Version ES6 JS JSON

JS Forms

JS Forms Forms API

JS Objects

Object Definitions Object Properties Object Methods Object Constructors Object Prototypes

JS Functions

Function Definitions Function Parameters Function Invocation Function Call Function Apply Function Closures

JS HTML DOM

DOM Intro DOM Methods DOM Document DOM Elements DOM HTML DOM CSS DOM Animations DOM Events DOM Event Listener DOM Navigation DOM Nodes DOM Collections DOM Node Lists

JS Browser BOM

JS Window JS Screen JS Location JS History JS Navigator JS Popup Alert JS Timing JS Cookies

JS AJAX

AJAX Intro AJAX XMLHttp AJAX Request AJAX Response AJAX XML File AJAX PHP AJAX ASP AJAX Database AJAX Applications

JS JSON

JSON Intro JSON Syntax JSON vs XML JSON Data Types JSON Objects JSON Arrays JSON Parse JSON Stringify JSON PHP JSON HTML JSON JSONP

JS References

JavaScript Objects HTML DOM Objects


JavaScript Массивы


Массивы JavaScript используются для хранения нескольких значений в одной переменной.

Пример

var cars = ["Saab", "Volvo", "BMW"];

Что такое массив?

Массив — это специальная переменная, которая может содержать более одного значения за раз.

Если у вас есть список элементов (список названий автомобилей, например), хранение автомобилей в одиночных переменных может выглядеть так:

var car1 = "Saab";
var car2 = "Volvo";
var car3 = "BMW";

Однако, что, если вы хотите, чтобы петля через автомобили и найти конкретный один? А что, если у вас не 3 машины, но 300?

Решение представляет собой массив!

Массив может содержать много значений под одним именем, и вы можете получить доступ к значениям, ссылаясь на номер индекса.


Создание массива

Использование литерала массива является самым простым способом создания массива JavaScript.

Синтаксис:

var array_name = [item1, item2, ...];      

Пример

var cars = ["Saab", "Volvo", "BMW"];

Пробелы и разрывы строк не важны. Объявление может охватывать несколько строк:

Пример

var cars = [
    "Saab",
    "Volvo",
    "BMW"
];

Ввод запятой после последнего элемента (например, "BMW") не согласуется между браузерами.

IE 8 и более ранних версий не удастся.



Использование ключевого слова JavaScript New

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

Пример

var cars = new Array("Saab", "Volvo", "BMW");

Два приведенных выше примера делают то же самое. Нет необходимости использовать новый массив ().
Для простоты, удобочитаемости и скорости выполнения используйте первый (метод литерала массива).


Доступ к элементам массива

Вы ссылаетесь на элемент массива, ссылаясь на номер индекса.

Эта инструкция обращается к значению первого элемента в автомобилях:

var name = cars[0];

Этот оператор изменяет первый элемент в автомобилях:

cars[0] = "Opel";

Пример

var cars = ["Saab", "Volvo", "BMW"];
document.getElementById("demo").innerHTML = cars[0];

[0] — первый элемент массива. [1] является вторым. Индексы массива начинаются с 0.


Доступ к полному массиву

С помощью JavaScript можно получить доступ к полному массиву, ссылаясь на имя массива:

Пример

var cars = ["Saab", "Volvo", "BMW"];
document.getElementById("demo").innerHTML = cars;

Массивы — это объекты

Массивы представляют собой особый тип объектов. Оператор typeof в JavaScript возвращает "Object" для массивов.

Но массивы JavaScript лучше всего описывают как массивы.

Массивы используют номера для доступа к своим "элементам". В этом примере Person [0] возвращает John:

Массив:

var person = ["John", "Doe", 46];

Объекты используют имена для доступа к своим "членам". В этом примере Person. имя возвращает John:

Object:

var person = {firstName:"John", lastName:"Doe", age:46};

Элементы массива могут быть объектами

JavaScript-переменные могут быть объектами. Массивы — это специальные виды объектов.

Из-за этого можно иметь переменные различных типов в одном массиве.

Объекты можно иметь в массиве. Можно иметь функции в массиве. Массивы можно иметь в массиве:

myArray[0] = Date.now;
myArray[1] = myFunction;
myArray[2] = myCars;

Свойства и методы массива

Реальная мощь массивов JavaScript — это встроенные свойства и методы массива:

Примеры

var x = cars.length;   // The length property returns the number of elements
var y = cars.sort();   // The sort() method sorts arrays

Методы массива рассматриваются в следующих главах.


Свойство Length

Свойство length массива возвращает длину массива (количество элементов массива).

Пример

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.length;                       // the length of fruits is 4

Свойство Length всегда является одним больше, чем самый высокий индекс массива.


Циклические элементы массива

Лучший способ перебора массива — использовать цикл «for»:

Пример

var fruits, text, fLen, i;

fruits = ["Banana", "Orange", "Apple", "Mango"];
fLen = fruits.length;
text = "<ul>";
for (i = 0; i <fLen; i++) {
    text += "<li>" + fruits[i] + "</li>";
}

Добавление элементов массива

Самый простой способ добавить новый элемент в массив — использовать метод Push:

Пример

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.push("Lemon");                // adds a new element (Lemon) to fruits

Новый элемент также может быть добавлен в массив с помощью свойства Length:

Пример

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits[fruits.length] = "Lemon";     // adds a new element (Lemon) to fruits

Предупреждение!

Добавление элементов с высокими индексами может создать неопределенные «дыры» в массиве:

Пример

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits[6] = "Lemon";                 // adds a new element (Lemon) to fruits

Ассоциативные массивы

Многие языки программирования поддерживают массивы с именованными индексами.

Массивы с именованными индексами называются ассоциативными массивами (или хэшами).

JavaScript не поддерживает массивы с именованными индексами.

В JavaScript массивы всегда используют пронумерованные индексы.

Пример

var person = [];
person[0] = "John";
person[1] = "Doe";
person[2] = 46;
var x = person.length;         // person.length will return 3
var y = person[0];             // person[0] will return "John"

Предупреждение!!
При использовании именованных индексов JavaScript будет переопределять массив в стандартный объект.
После этого некоторые методы и свойства массива будут давать неверные результаты.

Пример:

var person = [];
person["firstName"] = "John";
person["lastName"] = "Doe";
person["age"] = 46;
var x = person.length;         // person.length will return 0
var y = person[0];             // person[0] will return undefined

Разница между массивами и объектами

В JavaScript массивы используют пронумерованные индексы.

В JavaScript объекты используют именованные индексы.

Массивы представляют собой особый вид объектов с пронумерованными индексами.


Когда следует использовать массивы. Когда следует использовать объекты.

  • JavaScript не поддерживает ассоциативные массивы.
  • Следует использовать объекты , если требуется, чтобы имена элементов были строками (текстом).
  • Массивы следует использовать, если необходимо, чтобы имена элементов номера.

Избегайте нового массива ()

Нет необходимости использовать встроенный конструктор массива в JavaScript Новый массив ().

Вместо этого используйте [].

Эти две различные инструкции создают новый пустой массив с именем Points:

var points = new Array();         // Bad
var points = [];                  // Good 

Эти две различные инструкции создают новый массив, содержащий 6 чисел:

var points = new Array(40, 100, 1, 5, 25, 10); // Bad
var points = [40, 100, 1, 5, 25, 10];          // Good

Ключевое слово New усложняет только код. Он также может привести к неожиданным результатам:

var points = new Array(40, 100);  // Creates an array with two elements (40 and 100)

Что делать, если удалить один из элементов?

var points = new Array(40);       // Creates an array with 40 undefined elements !!!!!

Как распознать массив

Обычно возникает вопрос: как узнать, является ли переменная массивом?

Проблема в том, что оператор JavaScript typeof возвращает "Object":

var fruits = ["Banana", "Orange", "Apple", "Mango"];

typeof fruits;             // returns object

Оператор typeof возвращает объект, так как массив JavaScript является объектом.

Решение 1:

Для решения этой проблемы ECMAScript 5 определяет новый метод Array.-Array ():

Array.isArray(fruits);     // returns true

Проблема с этим решением заключается в том, что ECMAScript 5 не поддерживается в старых браузерах.

Решение 2:

Для решения этой проблемы вы можете создать свою собственную функцию-массив ():

function isArray(x) {
    return x.constructor.toString().indexOf("Array")> -1;
}

Функция выше всегда возвращает значение true, если аргумент является массивом.

Или точнее: он возвращает true, если прототип объекта содержит слово "Array".

Решение 3:

Оператор instanceof возвращает значение true, если объект создан заданным конструктором:

var fruits = ["Banana", "Orange", "Apple", "Mango"];

fruits instanceof Array     // returns true