Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   проблема з типами (https://javascript.ru/forum/events/36428-problema-z-tipami.html)

I_nub 14.03.2013 21:00

проблема з типами
 
не подкажете где ошибка ?
есть подозрение что переменние month2,day2,year2-строчки.Я решил их умножить на 1 чтоби преоброзовать в число, но не получается.:blink:
И да я знаю что ето неполноценний и неправильний таймер:yes:

<HTML>
<HEAD>      
</HEAD>
<BODY onload="now();">
<br>
<SCRIPT>
nown = new Date();
var monthlessn = nown.getMonth() + 1;  
document.write("Сьогодні " + nown.getDate() + "-го  " + monthlessn + "  Місяць  " + nown.getFullYear() + "  рік  " + nown.getHours() + "  година ")
function go() 
{
now = new Date();
var day2 = 0;
var day = 0;  
var dayless = now.getDate();
var month2 = 0;
var month = 0;
var monthless = monthlessn;  
var year2 = 0;
var year = 0;
var yearless = now.getFullYear();
month2 == (month*1)-monthless;
day2 == (day*1)-dayless;
year2 == (year*1)-yearless;
alert(day2 + " днів " + month2 + " місяців " + year2 + "рокiв")
}
</SCRIPT>
<br>
<br>
Введіть день :
<select onChange="day=+this.value;alert(day)">  
<option value="1" selected="selected">1
</option>
<option value="2">2
</option>
<option value="3">3
</option>
<option value="4">4
</option>              
<option value="5">5
</option>
<option value="6">6
</option>
<option value="7">7
</option>
<option value="8">8
</option>
<option value="9">9
</option>
<option value="10">10
</option>
<option value="11">11
</option>
<option value="12">12
</option>
<option value="13">13
</option>
<option value="14">14
</option>
<option value="15">15
</option>
<option value="16">16
</option>
<option value="17">17
</option>
<option value="18">18
</option>
<option value="19">19
</option>
<option value="20">20
</option>
<option value="21">21
</option>
<option value="22">22
</option>
<option value="23">23
</option>
<option value="24">24
</option>
<option value="25">25
</option>
<option value="26">26
</option>
<option value="27">27
</option>
<option value="28">28
</option>
<option value="29">29
</option>
<option value="30">30
</option>
<option value="31">31
</option>
</select>
Введіть місяць :
<select onChange="month=+this.value;alert(month)">
<option value="1" selected="selected">Січень
</option>
<option value="2">Лютий
</option>
<option value="3">Березень
</option>
<option value="4">Квітень
</option>
<option value="5">Травень
</option>
<option value="6">Червень
</option>
<option value="7">Липень
</option>
<option value="8">Серпень
</option>
<option value="9">Вересень
</option>
<option value="10">Жовтень
</option>
<option value="11">Листопад
</option>
<option value="12">Грудень
</option>
</select>
Введіть рік :
<select onChange="year=+this.value;alert(year)">
<option value="2013" selected="selected">2013
</option>
<option value="2014">2014
</option>
<option value="2015">2015
</option>
<option value="2016">2016
</option>
<option value="2017">2017
</option>
<option value="2018">2018
</option>
<option value="2019">2019
</option>
<option value="2020">2020
</option>
<option value="2021">2021
</option>
<option value="2022">2022
</option>
<option value="2023">2023
</option>
<option value="2024">2024
</option>
</select>
<br>
<INPUT TYPE="button" VALUE="Розрахунок" onClick="go()">
<br>
</BODY>
</HTML>

рони 14.03.2013 21:38

Цитата:

Сообщение от I_nub
есть подозрение что переменние month2,day2,year2-строчки

есть подозрение что эти переменные внутри функции а там они как за каменной стеной недостучатся.Видимость однако называется.

I_nub 14.03.2013 21:42

Цитата:

Сообщение от рони (Сообщение 240797)
есть подозрение что эти переменные внутри функции а там они как за каменной стеной недостучатся.Видимость однако называется.

И что посоветуеш ?

devote 14.03.2013 21:43

Цитата:

Сообщение от I_nub
Я решил их умножить на 1 чтоби преоброзовать в число

для это умножать не нужно, способов море:
var a = "12345";
alert([a, typeof a]);

alert([~~a, typeof ~~a]);

alert([+a, typeof +a]);

alert([a >> 0, typeof (a >> 0)]);

рони 14.03.2013 21:47

I_nub,
обьяви переменные которые меняешь вне функции -- будут они глобально видимы -- потом научишься внутря прятать.

I_nub 14.03.2013 22:00

Цитата:

Сообщение от рони (Сообщение 240802)
I_nub,
обьяви переменные которые меняешь вне функции -- будут они глобально видимы -- потом научишься внутря прятать.

Спасибо.

rgl 15.03.2013 10:47

Цитата:

Сообщение от devote (Сообщение 240799)
для это умножать не нужно, способов море:

Только надо не забывать, что только второй способ преобразует в "то же" число, первый и третий преобразует в 32-битное целое, т.е. отбрасывает дробную часть:
var a = "3.14159";
alert([a, typeof a]);

alert([~~a, typeof ~~a]);

alert([+a, typeof +a]);

alert([a >> 0, typeof (a >> 0)]);

хотя в данном конкретном случае это не существенно, числа и так целые.

danik.js 16.03.2013 04:08

Я недавно узнал еще такой способ:

var a = "3.14159";
alert([a|0, typeof (a|0)]);

rgl 16.03.2013 17:50

Все битовые операции (&, |, ^, ~, сдвиги) делают следующее:
1. Преобразуют операнд (в нашем случае строка) в число.
2. У полученного числа отбрасывают дробную часть, а от целой части оставляют только 32 младших бита, старшие отбрасывают.
3. С полученным числом делают указанную операцию.
4. Результат трактуется как 32-битное целое со знаком.
Желающие могут поэкспериментировать, для экспериментов взять числа два миллиарда (с ним все будет нормально), три миллиарда (а вот оно уже в 31 бит не помещается, а значит будет единичка в бите, который трактуется как знаковый), пять миллиардов (оно в 32 бита не влазит никак).
Наверно, лучше все-же пользоваться плюсом, битовые операции не только теряют дробную часть, но и делают ненужные действия, даже если сами по себе битовые операции быстрые, то преобразование числа из плавающего формата в целый и затем обратно - дополнительная потеря времени. Хотя сам ничего не замерял, так что рассуждения чисто теоретические :-)


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