Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.09.2012, 11:28
Интересующийся
Отправить личное сообщение для Alexxiss Посмотреть профиль Найти все сообщения от Alexxiss
 
Регистрация: 18.08.2012
Сообщений: 21

Подскажите почему 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>
Ответить с цитированием
  #2 (permalink)  
Старый 13.09.2012, 11:39
Аватар для lord2kim
Профессор
Отправить личное сообщение для lord2kim Посмотреть профиль Найти все сообщения от lord2kim
 
Регистрация: 03.05.2011
Сообщений: 848

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>
Ответить с цитированием
  #3 (permalink)  
Старый 13.09.2012, 16:01
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Практика: Перевернуть строку.
Ответить с цитированием
  #4 (permalink)  
Старый 13.09.2012, 16:16
Профессор
Отправить личное сообщение для oneguy Посмотреть профиль Найти все сообщения от oneguy
 
Регистрация: 31.05.2012
Сообщений: 396

У вас перед выполнением цикла переменная str2 не инициализирована, поэтому она имеет значение undefined, дальше, при первой итерации цикла i равно str.length, а в строке есть только символы от 0 до str.length-1, поэтому str[i] даёт undefined, а undefined+undefined даёт NaN.
Ответить с цитированием
  #5 (permalink)  
Старый 13.09.2012, 16:32
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

шаг 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 подключился
Ответить с цитированием
  #6 (permalink)  
Старый 14.09.2012, 10:57
Интересующийся
Отправить личное сообщение для Alexxiss Посмотреть профиль Найти все сообщения от Alexxiss
 
Регистрация: 18.08.2012
Сообщений: 21

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



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите пожалуйста почему не работает. gheka Общие вопросы Javascript 7 11.02.2012 22:07
Свойства объекта, методы и this. Почему свойство вызывается с () ? jsuse Общие вопросы Javascript 2 04.11.2011 20:39
подскажите где ошибка пожалуйста satyr22 Javascript под браузер 2 24.08.2011 11:00
Подскажите почему ? AlexNiko Элементы интерфейса 2 08.03.2010 20:32
Почему не работает скрипт, подскажите aviaks Ваши сайты и скрипты 2 05.05.2009 14:38