変数の型が1の場合は変数の値を1だけ増分し、numberそうでない場合は変数に0を割り当てるルーチンを作成するnull必要がありましたundefined。
最初の実装はv >= 0 ? v += 1 : v = 0、数値ではないものはすべて算術式を偽にすると考えたためでしたが、null >= 0真と評価されたため、それは間違っていました。次にnull、0のように動作することを学び、次の式はすべてtrueと評価されます。
null >= 0 && null <= 0!(null < 0 || null > 0)null + 1 === 11 / null === InfinityMath.pow(42, null) === 1
もちろん、nullis 0でnull == 0はありません。false と評価されます。これは、一見トートロジー的な表現を(v >= 0 && v <= 0) === (v == 0)誤ったものにします。
null実際には0ではないのに、なぜ0のようなものですか?
nullかundefined:c = -~c // Results in 1 for null/undefined; increments if already a number
undefined初期化されていない変数の変数値です。null一方、は空のオブジェクト値であり、数値と混在させないでください。null数値と組み合わせるべきではないので、nullは数値のように振る舞う必要はありません。