Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.04.2011, 22:19
Новичок на форуме
Отправить личное сообщение для AndreyOo Посмотреть профиль Найти все сообщения от AndreyOo
 
Регистрация: 02.04.2011
Сообщений: 2

То ли лыжи не едут, то ли я... или почему 3+5=35?
Доброго времени суток. Не давно начал осваивать JavaScript, осваиваю по этому руководству. Вот собственно некоторый фрагмент моего скрипта:
<script language="JavaScript" type="text/javascript">
  var vol=new Object();
  vol.sum=5;
    function ale() {
      vol=document.form1.coe.value+vol.sum;
      alert(vol);
    }
</script>
<form name="form1" id="form1">
    <input type="text" name="coe" value="0" /> <input type="button" value="button" onclick="ale()" />
</form>

Правильность скрипта проверял здесь. Вставил на сайт - работает, но не так, как я ожидал. Ввел в поле цифру 3. При первом нажатии на кнопку получается результат "35", при последующих нажатиях - выходит 3undefined. Читал, что вроде преобразование переменной из текстового типа в числовой происходит автоматически... Однако undefined меня смутило еще сильнее. Объясните пожалуйста, что происходит в скрипте и как это исправить?

P.S забегая вперед: можно ли вместо document.form1.coe.value писать просто coe.value, а форму определить в глобальную область видимости?
Ответить с цитированием
  #2 (permalink)  
Старый 02.04.2011, 22:47
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Вы переменную vol перезаписываете.
Ответить с цитированием
  #3 (permalink)  
Старый 02.04.2011, 23:10
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Сообщение от AndreyOo
P.S забегая вперед: можно ли вместо document.form1.coe.value писать просто coe.value, а форму определить в глобальную область видимости?
Нет.

Сообщение от AndreyOo
Ввел в поле цифру 3. При первом нажатии на кнопку получается результат "35"
Потому что document.form1.coe.value - строка. При сложении строк с любыми другими значениями происходит конкатенация.
Ответить с цитированием
  #4 (permalink)  
Старый 03.04.2011, 00:13
Аватар для walik
Профессор
Отправить личное сообщение для walik Посмотреть профиль Найти все сообщения от walik
 
Регистрация: 09.11.2009
Сообщений: 1,101

Добавлю
Преобразовать строку в число можно к примеру с помощью parseInt()
var val1 = '3';
var val2 = 5;
alert(parseInt(val1)+val2);
__________________
"Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете."
Мой сертификат :-D клацай
Ответить с цитированием
  #5 (permalink)  
Старый 03.04.2011, 00:27
Новичок на форуме
Отправить личное сообщение для AndreyOo Посмотреть профиль Найти все сообщения от AndreyOo
 
Регистрация: 02.04.2011
Сообщений: 2

Спасибо, все заработало. Впредь буду аккуратней пользоваться свойствами объектов
Ответить с цитированием
  #6 (permalink)  
Старый 03.04.2011, 03:33
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,480

Сообщение от B@rmaley.e><e Посмотреть сообщение
Нет.
А как же with?
<script type="text/javascript">  
var vol={sum:5}
function ale() {
  with(document.form1){
    vol.sum=+coe.value + vol.sum;
    alert(vol.sum);
  }
}
</script>
<form name="form1" id="form1">
    <input type="text" name="coe" value="6" /> <input type="button" value="button" onclick="ale()" />

Пояснение для AndreyOo: + пред строкой делает из неё число.
__________________
29375, 35

Последний раз редактировалось Aetae, 03.04.2011 в 03:36.
Ответить с цитированием
  #7 (permalink)  
Старый 03.04.2011, 12:01
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Aetae, а, ну так можно, да. Но использовать конструкцию with не рекомендуют.
Ответить с цитированием
  #8 (permalink)  
Старый 03.04.2011, 12:30
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от Aetae Посмотреть сообщение
+ пред строкой делает из неё число.
оооо

обожаю их

где можно прочитать про них ВСЕХ ??

я знаю про ~, ''+x(to str), ++,--, +, -;

что-нибудь еще есть?

примеры тильд
alert(  ~2   ); //  - ( x + 1 )

alert( ~~2 )  //       -(   -(2+1)  + 1 ) -> - ( -3 +1) = 2
Ответить с цитированием
  #9 (permalink)  
Старый 03.04.2011, 16:57
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,480

http://javascript.ru/bitwise-operators
__________________
29375, 35
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что лучше self.open или window.open ? и почему? alb Events/DOM/Window 3 28.07.2010 20:53
То-ли лыжи не едут, толи... возможно ошибка в коде. AzriMan Общие вопросы Javascript 19 18.05.2009 16:07