Мне пришлось написать процедуру, которая увеличивает значение переменной на 1, если ее тип равен number
и присваивает 0 переменной, если нет, где переменная изначально null
или undefined
.Почему `null> = 0 && null <= 0`, но не` null == 0`?
Первая реализация была v >= 0 ? v += 1 : v = 0
, потому что я думал, что что-то не число сделает арифметическое выражение ложным, но это было неправильно, так как null >= 0
оценивается как true. Затем я узнал, что null
ведет себя как 0, и все выражения оцениваются как истинные.
null >= 0 && null <= 0
!(null < 0 || null > 0)
null + 1 === 1
1/null === Infinity
Math.pow(42, null) === 1
Конечно, null
не 0. null == 0
оценивается в ложь. Это делает кажущееся тавтологическое выражение (v >= 0 && v <= 0) === (v == 0)
ложным.
Почему null
нравится 0, хотя на самом деле это не 0?
Он говорит о JavaScript. Ваш пример находится в PHP. В PHP-операторе == сравниваются значения особым образом. Вы можете сделать действительно сумасшедшие сравнения, такие как «10» == «1e1» (это правда). Если вы использовали operator ===, вы получите совершенно другой результат, потому что он проверяет, совпадает ли тип, а также значение. Проверьте эту ссылку: http://www.php.net/manual/en/language.operators.comparison.php – Pijusn
Оператор PHP '==' действительно работает специальным образом. –
Если вам нужно было начинать считать с 1 вместо 0, существует очень простой способ увеличить счетчики, которые изначально либо «null», либо «undefined»: 'c = - ~ c // Результаты в 1 для null/undefined; увеличивается, если уже номер –