Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   То ли лыжи не едут, то ли я... или почему 3+5=35? (https://javascript.ru/forum/dom-window/16302-li-lyzhi-ne-edut-li-ya-ili-pochemu-3-5%3D35.html)

AndreyOo 02.04.2011 22:19

То ли лыжи не едут, то ли я... или почему 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, а форму определить в глобальную область видимости?

Kolyaj 02.04.2011 22:47

Вы переменную vol перезаписываете.

B@rmaley.e><e 02.04.2011 23:10

Цитата:

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

Нет.

Цитата:

Сообщение от AndreyOo
Ввел в поле цифру 3. При первом нажатии на кнопку получается результат "35"

Потому что document.form1.coe.value - строка. При сложении строк с любыми другими значениями происходит конкатенация.

walik 03.04.2011 00:13

Добавлю :)
Преобразовать строку в число можно к примеру с помощью parseInt()
var val1 = '3';
var val2 = 5;
alert(parseInt(val1)+val2);

AndreyOo 03.04.2011 00:27

Спасибо, все заработало. Впредь буду аккуратней пользоваться свойствами объектов :)

Aetae 03.04.2011 03:33

Цитата:

Сообщение от B@rmaley.e><e (Сообщение 99046)
Нет.

А как же 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: + пред строкой делает из неё число.

B@rmaley.e><e 03.04.2011 12:01

Aetae, а, ну так можно, да. Но использовать конструкцию with не рекомендуют.

melky 03.04.2011 12:30

Цитата:

Сообщение от Aetae (Сообщение 99052)
+ пред строкой делает из неё число.

оооо

обожаю их

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

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

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

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

alert( ~~2 )  //       -(   -(2+1)  + 1 ) -> - ( -3 +1) = 2

Aetae 03.04.2011 16:57

http://javascript.ru/bitwise-operators


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