Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > Проверка на идентичность


Автор: Pierre 3.10.2015, 11:37
Всем привет. Столкнулся тут с такой проблемой. Не совсем могу понять, почему в данном примере выражения не идентичны?
<script type="text/javascript" >
    var a = 0.3, b = 0.2, c = 0.1; 
    if ((a + b) + c === a + (b + c)) {alert('Equals')} else {alert('Not equals')};
</script>

Вроде оператор === сравнивает не только значение, но и тип данных. Хотя используя typeof к каждой переменной получаем везде number
Но при использовании === (при сравнении выражений) мы вроде имеем булевые значения, тип boolean, поскольку идет построение if, else(в добавок).

Кто может подсказать в чем истина?)

Добавлено через 7 минут и 10 секунд
Просто я считаю, при выполнении сравнения в первом выражении типы данных у a и b - number, а у c - boolean, а во втором a - boolean, а у b,c - number и поэтому сами выражения не идентичны. Это мнение ошибочно?

Автор: Pierre 3.10.2015, 12:37
разобрался сам, мое мнение ошибочно. Не в типе данных дело) Все намного проще)

Автор: R71MT 4.10.2015, 01:27
..мы рады за тебя! Хоть-бы поделился секретом.... А то зачем тему создавал?

Автор: ksnk 4.10.2015, 13:51
R71MT, Вещественные нельзя сравнивать таким простым образом. В этом и дело. Откуда там могло взяться логическое - нипанятна
Код

var a = 0.3, b = 0.2, c = 0.1;
console.log((a + b) + c,a + (b + c));

Код

0.6 0.6000000000000001

Автор: vadya1976 5.10.2015, 17:04
user posted image 

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Proverka-na-identichnost-id560f942aae2015226b8b4567#findElement_E7045_56128374ae2015916a97df7a_0

Автор: vadya1976 5.10.2015, 17:05
http://blog.badata.net/ru/177-kostylizaciya.html

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Proverka-na-identichnost-id560f942aae2015226b8b4567#findElement_E7045_56128396ae2015197197dcf8_0

Автор: Pierre 5.10.2015, 22:07
Цитата(ksnk @ 4.10.2015,  13:51)
R71MT, Вещественные нельзя сравнивать таким простым образом. В этом и дело. Откуда там могло взяться логическое - нипанятна
Код

var a = 0.3, b = 0.2, c = 0.1;
console.log((a + b) + c,a + (b + c));

Код

0.6 0.6000000000000001

Я ж и написал, что мнение ошибочно. Это просто слишком мозг не в ту степь пошел.
А так просто посчитал в js консоле оба выражения подставив значения и все. смутил просто изначально ===, но заменив его и на == разницы не было.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)