変数の型が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 === 1
1 / null === Infinity
Math.pow(42, null) === 1
もちろん、null
is 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は数値のように振る舞う必要はありません。