Tôi đã phải viết một thói quen làm tăng giá trị của biến lên 1 nếu kiểu của nó là number và gán 0 cho biến nếu không, trong đó biến ban đầu là nullhoặc undefined.
Việc thực hiện đầu tiên là v >= 0 ? v += 1 : v = 0vì tôi nghĩ rằng bất cứ điều gì không phải là một con số sẽ làm cho biểu thức số học trở thành sai, nhưng nó đã sai vì null >= 0được đánh giá là đúng. Sau đó, tôi đã học được các nullhành vi như 0 và các biểu thức sau đây đều được đánh giá là đúng.
null >= 0 && null <= 0!(null < 0 || null > 0)null + 1 === 11 / null === InfinityMath.pow(42, null) === 1
Tất nhiên, nullkhông phải null == 0là 0. được đánh giá là sai. Điều này làm cho biểu hiện dường như tautological (v >= 0 && v <= 0) === (v == 0)sai.
Tại sao nullgiống như 0, mặc dù nó không thực sự là 0?
nullhoặc undefined:c = -~c // Results in 1 for null/undefined; increments if already a number
undefinedlà một giá trị biến, cho các biến chưa được khởi tạo. nullmặt khác, là một giá trị đối tượng trống và không được trộn lẫn với các số. nullkhông nên kết hợp với số, vì vậy null không nên hoạt động như số.