Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.08.2017, 09:39
Профессор
Отправить личное сообщение для atanov Посмотреть профиль Найти все сообщения от atanov
 
Регистрация: 27.06.2016
Сообщений: 180

как же всё-таки работает while
не пойму почему не работает while

такой незамысловатый скрипт выдаёт кол-во строк в таблице, включая заголовок.

var aaaa = document.getElementsByTagName('tr');
for (var j=0;j<aaaa.length;j++){}
alert (j);


а с while'ом не работает, браузер виснет:

var j = 0;
var aaaa = document.getElementsByTagName('tr');
while (aaaa){j++;}
alert (j);

Последний раз редактировалось atanov, 23.08.2017 в 09:43.
Ответить с цитированием
  #2 (permalink)  
Старый 23.08.2017, 10:01
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

https://learn.javascript.ru/traversi...igation-tables

А код полный ахтунг, поэтому и не работает.
Ответить с цитированием
  #3 (permalink)  
Старый 23.08.2017, 10:05
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от atanov
такой незамысловатый скрипт выдаёт кол-во строк в таблице, включая заголовок.
Для определения количества строк достаточно вот такого, более незамысловатого скрипта
alert(document.getElementsByTagName('tr').length);

Циклы для этого вообще не нужны.
Ответить с цитированием
  #4 (permalink)  
Старый 23.08.2017, 10:35
Профессор
Отправить личное сообщение для atanov Посмотреть профиль Найти все сообщения от atanov
 
Регистрация: 27.06.2016
Сообщений: 180

ksa, laimas,

Да хрен с ним с кодом, я хотел бы разобраться с while'ом и можно ли while'ом, а не for перебрать полученную коллекцию элементов, скажем с тегом tr или td и т.д.
Ответить с цитированием
  #5 (permalink)  
Старый 23.08.2017, 10:37
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,795

atanov, можно
/* 
Из рубрики «Как делать не нужно».
Подсчет кол-ва элементов массива.
*/
var i=0;
while(i++<aaaa.length){}
Ответить с цитированием
  #6 (permalink)  
Старый 23.08.2017, 10:38
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от atanov
я хотел бы разобраться с while'ом
Ну так какие проблемы - выводите в консоль состояние итераций, станет понятно в чем бред кода.
Ответить с цитированием
  #7 (permalink)  
Старый 23.08.2017, 11:00
Профессор
Отправить личное сообщение для atanov Посмотреть профиль Найти все сообщения от atanov
 
Регистрация: 27.06.2016
Сообщений: 180

Nexus, да это моя проблема, наверное неправильно формулирую.

Главный вопрос - из описания тут https://learn.javascript.ru/while-for
следует, что пока элемент в скобках есть, выполняется тело цикла.
Дословно - "Условие в скобках интерпретируется как логическое значение, поэтому вместо while (i!=0) обычно пишут while (i)".
Очевидно, что в моём случает переменная это объект и как этот объект проверить на true/false, чтобы выполнялось тело цикла? В php например, при переборке массива, который получен путём запроса sql, так сделать можно: while ($row['...']){...}
Ответить с цитированием
  #8 (permalink)  
Старый 23.08.2017, 11:06
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от atanov
можно ли while'ом, а не for перебрать полученную коллекцию элементов
Разумеется можно.
Главное верно использовать пред или пост условие...

var j = 0;
var a = document.getElementsByTagName('tr');
while (a[j]){j++;}
alert (j);
Ответить с цитированием
  #9 (permalink)  
Старый 23.08.2017, 11:07
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от atanov
php например, при переборке массива, который получен путём запроса sql, так сделать можно: while ($row['...'])
Во-первых в РНР так сделать нельзя, можно while($row = fetch_assoc($result)) и работает это потому, что fetch_assoc() при каждом запросе автоматически сдвигает указатель на следующую строку ресурса, и если следующей строки не существует, то возвращается NULL, цикл заканчивается.

А у вас что? Вы же даже не пытались запустить отладку, чтобы понять в чем у вас проблема, так ведь? Просто упорно веруете, что должно работать, хотя условием задано не понять что.
Ответить с цитированием
  #10 (permalink)  
Старый 23.08.2017, 11:08
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,795

Сообщение от atanov
В php например, при переборке массива, который получен путём запроса sql, так сделать можно: while ($row['...']){...}
Таким вайлом вы бесконечный цикл получите, что в php, что (имхо) в большинстве любых других ЯП.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скрипт работает не как надо. sendik Элементы интерфейса 0 08.05.2017 13:36
Owl carousel 2 не работает с табами - как поправить? ligisayan jQuery 7 08.05.2016 13:41
Как перерисовать все элементы SVG на Canvas (d3.js+leaflet.js+html2canvas) Trippal Общие вопросы Javascript 0 10.02.2016 18:25
Callback работает не так как я от него жду singaporian Общие вопросы Javascript 3 14.08.2013 00:42
Как сделать все содержимое страницы не активным son313 jQuery 9 10.07.2013 16:58