Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
12 == "0xC"
php -r 'var_dump("2.00000000000000000123" == "2.00000000000000000456");'
bool(true)
$ php -r '$a=null; var_dump(--$a); var_dump(++$a);'
NULL
int(1)
If you compare a number with a string or the comparison involves numerical strings, then each string is converted to a number and the comparison performed numerically.Более того!
These rules also apply to the switch statement.То есть:
$ php -r 'switch("0x000000") { case "0e0": var_dump("Duh!"); }'
string(4) "Duh!"$ php -r 'var_dump([] < new stdclass); var_dump([] > INF);'
bool(true) // пустой массив меньше пустого класса
bool(true) // пустой массив больше бесконечности
"2.000000000000000123" == "2.000000000000000456"
var_dump("2.00000000000000000000000000000000123" == "2.00000000000000000000000000000000456"); // bool(true)
3v4l.org/pCMMn"2.33a" == "2.33b" // false - сравниваем строки, все логично
"1e2" == "100" // true - зачем он их преобразовывает в числа? Для кого тут кавычки стоят?!
Тоже два float в строках:
«2.000000000000000123» == «2.000000000000000456»
<?php
$a1 = "1.000000000000000123";
$b1 = "1.000000000000000456";
$a2 = "2.000000000000000123";
$b2 = "2.000000000000000456";
if($a1 == $b1) echo $a1.' == '.$b1;
else echo $a1.' != '.$b1;
echo '<br>';
if($a2 == $b2) echo $a2.' == '.$b2;
else echo $a2.' != '.$b2;
1.000000000000000123 != 1.000000000000000456
2.000000000000000123 != 2.000000000000000456
double(0.9)
string(3) «0.9»
double(0.9)
Deprecated: setlocale(): Passing locale category name as string is deprecated. Use the LC_* -constants instead in test.php on line 2
Да и уровень идиотии у js не такой зашкаливающий.
У js альтернативы как таковой нет.

Приведение типов в PHP == табурет о двух ножках?