Musiałem napisać procedurę, która zwiększa wartość zmiennej o 1, jeśli jej typ to number
i przypisuje 0 do zmiennej, jeśli nie, gdzie początkowo jest zmienna null
lub undefined
.Dlaczego `null> = 0 && null <= 0`, ale nie` null == 0`?
Pierwsza implementacja to v >= 0 ? v += 1 : v = 0
, ponieważ uważałem, że cokolwiek, a nie liczba, sprawiłoby, że wyrażenie arytmetyczne było fałszywe, ale było błędne, ponieważ null >= 0
zostało ocenione jako prawdziwe. Potem dowiedziałem się, że null
zachowuje się jak 0, a wszystkie poniższe wyrażenia są prawdziwe.
null >= 0 && null <= 0
!(null < 0 || null > 0)
null + 1 === 1
1/null === Infinity
Math.pow(42, null) === 1
Oczywiście null
nie jest 0. null == 0
oceniana jest na false. To sprawia, że pozornie tautologiczna ekspresja jest fałszywa.
Dlaczego jest null
jak 0, chociaż w rzeczywistości nie jest 0?
On mówi o JavaScript. Twój przykład jest w PHP. W PHP operator == porównuje wartości w specjalny sposób. Możesz dokonać naprawdę szalonych porównań, takich jak "10" == "1e1" (co jest prawdą). Jeśli użyłeś operatora ===, otrzymasz zupełnie inny wynik, ponieważ sprawdzi on, czy typ pasuje, a także wartość. Sprawdź ten link: http://www.php.net/manual/en/language.operators.comparison.php – Pijusn
Operator PHP "==" naprawdę działa w "specjalny" sposób. –
Jeśli Twoim wymaganiem było rozpoczęcie liczenia o wartości 1 zamiast 0, istnieje naprawdę zwięzły sposób zwiększania liczników, które początkowo mają wartość 'null' lub' undefined': 'c = - ~ c // Wyniki w 1 dla wartości null/undefined; inkrementacja, jeśli już ' –