Урок 7 по JScript: for…in – цикл для работы с массивами и объектами

В этой статье мы рассмотрим цикл for…in js сценариев языка jscript. Данный js цикл for…in не предназначен, как остальные циклы, для выполнения n-го количества операций, его основное назначение – получение доступа к элементам массива и объекта. Он практичен в том случае, если надо просмотреть свойства какого-то объекта или произвести групповые операции над всеми элементами массива.

Давайте для начала посмотрим на общий синтаксис цикла for…in:

for (имя переменной in [имя объекта|имя массива]) {тело цикла}

Тут логика работы довольно проста, сразу после ключевого слова for в круглых скобках указывается имя переменной, которая будет хранить ссылку на нужный объект или массив, имя массива или объекта идёт после ключевого слова in, в фигурных скобках мы указываем нужные выражения.

Давайте рассмотрим следующий пример:

//********************************
// js цикл for...in
// for_in.js
//********************************
 
// простой массив
var new_arr=[1,2,3,4,5,10,12,12,14] ;
WScript.Echo (new_arr);
 
for (var element in new_arr){
     new_arr[element]*=2;
}
WScript.Echo (new_arr);
 
//Матрица 3х3
//неверный подход
var new_arr1=[[1,2,3],[4,5,10],[12,12,14]] ;
WScript.Echo (new_arr1);
 
for (var element in new_arr1){
     new_arr1[element]*=2;
}
WScript.Echo (new_arr1);
 
//Матрица 3х3
var new_arr2=[[1,2,3],[4,5,10],[12,12,14]] ;
WScript.Echo (new_arr2);
 
for (var element in new_arr2){
     for (var element1 in new_arr2[element]){
     new_arr2[element][element1]*=2;
     }
}
WScript.Echo (new_arr2);

Тут мы вначале объявляем простой массив, далее с помощью цикла for in js скрипта мы перебираем все элементы и умножаем их на два. После, мы создаем матрицу размером 3 на 3 и снова пробуем увеличить значение элементов в два раз, но получаем тип NaNне число, это и не удивительно, ведь матрица является двумерным массивом. В третьем примере мы уже дважды используем цикл for in для увеличения значений, в этот раз всё получилось. Как видим, цикл for in не нуждается в указании количества элементов и позволяет в групповом порядке произвести нужные манипуляции.

Хорошо, теперь давайте рассмотрим пример с объектом:

//********************************
// js цикл for...in
// for_in_1.js
//********************************
 
// объявляем объект Date
var index="";
var dd=new Date();
//создаем новый объект new_obj
var new_obj={a:100, b:25, c:"строка", d:dd.getYear()} ;
//пробуем вывести свойства, но безуспешно
WScript.Echo (new_obj);
 
for (var element in new_obj){
     index+=element + "\t" + new_obj[element] + "\n";
}
WScript.Echo (index);

В данном примере мы создали собственный объект с именем new_obj, ему мы прописали четыре свойства: a:100, b:25, c:»строка», d:dd.getYear(), тут getYear() – это метод объекта Date, который выводит текущий год. Если просто попытаться вывести напрямую через функцию Echo весь объект new_obj, то мы ничего не получим, тут-то и нужен js цикл for…in. Видим, что переменная element хранит в себе имя свойства, для доступа к самому значению мы используем конструкцию new_obj[element].

Скачать архив с примерами

К сожалению, подобным образом нельзя достучаться ко свойствам внешнего объекта, например, Scripting.FileSystemObject:

//********************************
// js цикл for...in
// for_in_2.js
//********************************
 
var index="";
var dd=WScript.CreateObject("Scripting.FileSystemObject");
 
for (var element in dd){
     index+=element + "\t" + dd[element] + "\n";
}
WScript.Echo (index);

В данном примере, вместо ожидаемых имен и значений свойств мы ничего не получим. Любопытно и то, что на JavaScript в теле HTML страницы похожий код всё-таки выдает нужные данные, но, будет работать не в каждом обозревателе.

Оцените статью
Технологии программирования и ведение блога
Добавить комментарий