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