ฉันต้องเขียนรูทีนที่เพิ่มค่าของตัวแปรด้วย 1 ถ้าชนิดของมันคือnumber
และกำหนด 0 ให้กับตัวแปรถ้าไม่ใช่โดยที่ตัวแปรนั้นเริ่มต้นnull
หรือundefined
หรือ
การใช้งานครั้งแรกเป็นv >= 0 ? v += 1 : v = 0
เพราะฉันคิดว่าอะไรที่ไม่ใช่จำนวนจะทำให้นิพจน์ทางคณิตศาสตร์เป็นเท็จ แต่มันผิดเนื่องจากnull >= 0
ถูกประเมินเป็นจริง จากนั้นฉันได้เรียนรู้null
พฤติกรรมเช่น 0 และนิพจน์ต่อไปนี้ล้วนได้รับการประเมินว่าเป็นจริง
null >= 0 && null <= 0
!(null < 0 || null > 0)
null + 1 === 1
1 / null === Infinity
Math.pow(42, null) === 1
แน่นอนnull
ไม่ใช่ 0 null == 0
ถูกประเมินเป็นเท็จ สิ่งนี้ทำให้การแสดงออกที่ดูเหมือนซ้ำซาก(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 จึงไม่ควรทำตัวเหมือนตัวเลข