ทำไมผมเกลียด JavaScript
Monday, August 5, 2013, 09:58 AM
ลองเปิด JavaScript Console ของ browser แล้วป้อนคำสั่งเหล่านี้ลงไปดูครับ …
console> [] + []
""
console> [] + {}
"[object Object]"
console> {} + []
0
console> {} + {}
NaN
จาก @garybernhardt
ก่อนหน้านี้เคยคิดว่าการเปรียบ ==
ประหลาดพอแล้วนะ (ยังดีที่มี ===
ช่วยชีวิต) แต่พอเจอแบบนี้ก็ทำเอาเสียหลักเลยทีเดียว
- ด้วยเหตุผลที่ JavaScript ทำงานกับ HTML ซึ่งเป็น markup language ที่เน้นการแสดงผลด้วย string เป็นหลัก การเอา array (หรือ type อื่นใดที่ไม่ใช่ตัวเลข) บวกกับอะไรซักอย่าง จะได้ผลลัพท์เป็น string ทันที (คล้ายๆ กับที่ C ที่มองทุกอย่างเป็น pointer arithmetic) พอเอา array ว่างๆ มาบวกกันเลยได้ string ว่าง
- ในทำนองเดียวกัน เมื่อเปลี่ยนเอา array ไปบวกกับ
{}
(ถือว่าเป็น object ใน JavaScript) ก็ทำให้ได้ผลลัพท์เป็น string ที่บอกว่านี่คือ object นั่นเอง - อย่างไรก็ตาม
{}
มีความหมายได้อีกอย่างคือ block (ที่ไม่ยอมทำหน้าที่เป็น variable scope ไปด้วยเหมือนภาษา C) ทำให้บรรทัดนี้มีค่าเทียบเท่ากับการเขียนเพียง+[]
เครื่องหมายบวกเลยทำหน้าที่ทางคณิตศาสตร์อย่างเต็มที่ และมันเปลี่ยน array ว่างให้กลายเป็นค่า 0 - ส่วน object อื่นใดที่ไม่ใช่ array, string ว่าง จะมีค่าเป็น not a number เมื่อเอามาดำเนินการทางคณิตศาสตร์ครับ
เฮ้อ จะเขียน JavaScript แต่ละทีมันเหนื่อย (ใจ) จริงๆ
author