Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Подскажите почему NаN (https://javascript.ru/forum/misc/31580-podskazhite-pochemu-nan.html)

Alexxiss 13.09.2012 11:28

Подскажите почему 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>

lord2kim 13.09.2012 11:39

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>

bes 13.09.2012 16:01

http://javascript.ru/forum/study/216...ut-stroku.html

oneguy 13.09.2012 16:16

У вас перед выполнением цикла переменная str2 не инициализирована, поэтому она имеет значение undefined, дальше, при первой итерации цикла i равно str.length, а в строке есть только символы от 0 до str.length-1, поэтому str[i] даёт undefined, а undefined+undefined даёт NaN.

bes 13.09.2012 16:32

шаг 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 подключился :)

Alexxiss 14.09.2012 10:57

Большое спасибо. Теперь понял что к чему) Хотел поставить всем + за помощь, но мне почему-то пишет "Вы должны добавить отзыв кому-то ещё, прежде чем сможете снова добавить его *****", причем oneguy и bes я еще не ставил плюсиков.


Часовой пояс GMT +3, время: 10:47.