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à null
hoặc undefined
.
Việc thực hiện đầu tiên là v >= 0 ? v += 1 : v = 0
vì 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 null
hà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 === 1
1 / null === Infinity
Math.pow(42, null) === 1
Tất nhiên, null
không phải null == 0
là 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 null
giống như 0, mặc dù nó không thực sự là 0?
null
hoặc undefined
:c = -~c // Results in 1 for null/undefined; increments if already a number
undefined
là một giá trị biến, cho các biến chưa được khởi tạo. null
mặ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ố. null
không nên kết hợp với số, vì vậy null không nên hoạt động như số.