Тема: JScript: Функция, имитирующая цикл For Each в VBScript
Описав функцию
function ForEachItem(Items, Do) {
with (new Enumerator(Items))
for (; !atEnd(); moveNext()) if (Do(item())) break;
}
можно VBScript-цикл
For Each element In group
[операторы]
[Exit For]
[операторы]
Next
переписать на JScript так
ForEachItem(group,
function (element) {
[операторы]
[return true;]
[операторы]
}
);
Примеры использования ForEachItem():
var Result="";
var fso=new ActiveXObject("Scripting.FileSystemObject");
ForEachItem(fso.GetFolder("C:\\Program Files").SubFolders,
function (Folder) {Result+=Folder.Name+"\n";}
);
WScript.Echo(Result);
ForEachItem([10, -20, 30, 40, 0, 50], function (a) {
if (a<0) return; //continue
if (a==0) return true; //break
WScript.Echo(a);}
);
var Result="";
var Shell=new ActiveXObject("Shell.Application");
ForEachItem(Shell.NameSpace("C:\\").Items(),
function (FolderItem) {Result+=FolderItem.Path+"\n";}
);
WScript.Echo(Result);
var Shell=new ActiveXObject("Shell.Application");
ForEachItem(Shell.Windows(), function (IE) {
if (IE) WScript.Echo(IE.LocationURL);}
);
Следует заметить, что переменные, описанные непосредственно в «теле цикла», будут сохранять свои значения только до конца текущей итерации.