Подскажите почему NаN
Здравствуйте! Извините на глупый вопрос, но хочу узнать такую вещь. Когда я меняю все элементы строки местами (задом на перед), то мне сначала выводит NaNдалее строка идет. Пример:
<script> var str = "asa"; var str2; for (var i = str.length; i>=0; i--) { str2 = str2 + str[i]; } alert (str2); if (str==str2) {alert("Good");} else {alert("bad");} </script> |
Alexxiss,
<script> var str = "asa"; var str2; for (var i = str.length; i>=0; i--) { str2 ? str2 += str[i] : str2 = str[i]; } alert (str2); if (str==str2) {alert("Good");} else {alert("bad");} </script> |
|
У вас перед выполнением цикла переменная str2 не инициализирована, поэтому она имеет значение undefined, дальше, при первой итерации цикла i равно str.length, а в строке есть только символы от 0 до str.length-1, поэтому str[i] даёт undefined, а undefined+undefined даёт NaN.
|
шаг str2 = str2 + str[str.length]; - лишний, так как с него начинается, то NaN появляется впереди
http://es5.javascript.ru/x11.html#x11.6.1 пункт 7 не срабатывает, так как типы обоих операндов не String, следовательно срабатывает пункт 8 в попытке привести аргументы к числу, undefined приводится к NaN (http://es5.javascript.ru/x9.html#x9.3), str2 на первом шаге undefined, также как и str2[str.length] если хотя бы один аргумент NaN - результат NaN (http://es5.javascript.ru/x9.html#x9.3), вот он ваш NaN, если бы str2 была объявлена как var str2 = ''; то вначале получили бы не NaN, а undefined PS: если где-то выскакивает что-то непонятное, как в данном примере, смотрите в спецификации алгоритмы работы, после этого, если что не понятно, спрашивайте ;) UPD: пока писал oneguy подключился :) |
Большое спасибо. Теперь понял что к чему) Хотел поставить всем + за помощь, но мне почему-то пишет "Вы должны добавить отзыв кому-то ещё, прежде чем сможете снова добавить его *****", причем oneguy и bes я еще не ставил плюсиков.
|
Часовой пояс GMT +3, время: 10:47. |