Saya harus menulis rutin yang menambah nilai variabel dengan 1 jika tipenya adalah numberdan memberikan 0 ke variabel jika tidak, di mana variabel awalnya nullatau undefined.
Implementasi pertama adalah v >= 0 ? v += 1 : v = 0karena saya pikir sesuatu yang bukan angka akan membuat ekspresi aritmatika salah, tetapi itu salah karena null >= 0dievaluasi benar. Kemudian saya belajar nullberperilaku seperti 0 dan ekspresi berikut semuanya dievaluasi menjadi benar.
null >= 0 && null <= 0!(null < 0 || null > 0)null + 1 === 11 / null === InfinityMath.pow(42, null) === 1
Tentu saja, nullbukan 0. null == 0dievaluasi salah. Ini membuat ekspresi yang tampaknya tautologis (v >= 0 && v <= 0) === (v == 0)salah.
Mengapa nullseperti 0, meskipun sebenarnya bukan 0?
nullatau undefined:c = -~c // Results in 1 for null/undefined; increments if already a number
undefinedadalah nilai variabel, untuk variabel yang belum diinisialisasi. null, di sisi lain, adalah nilai objek kosong, dan tidak boleh dicampur dengan angka. nulltidak boleh digabungkan dengan angka, jadi null tidak harus berperilaku seperti angka.