Kotchasan PHP Framework

9 ปัญหาสุดฮาในการเขียนโปรแกรมด้วยภาษา Javascript ที่นักพัฒนามักพบ

มีหลายปัญหาที่นักพัฒนา Javascript มักจะพบเจอ ซึ่งบางครั้งก็ดูเหมือนจะเป็นเรื่องตลกเพราะเกิดขึ้นบ่อยหรือมาจากข้อผิดพลาดเล็ก ๆ น้อย ๆ ที่คิดไม่ถึง ตัวอย่างเช่น

  1. การลืมใส่ var, let, หรือ const

    x = 10;

    เมื่อลืมประกาศตัวแปรด้วย var, let, หรือ const ตัวแปรนี้จะกลายเป็นตัวแปร global โดยอัตโนมัติ ซึ่งอาจสร้างปัญหาที่ไม่คาดคิดได้

  2. ผลลัพธ์ของ typeof NaN

    console.log(typeof NaN); // "number"

    แม้ว่า NaN (Not a Number) จะหมายถึงไม่ใช่ตัวเลข แต่ typeof NaN กลับคืนค่าเป็น "number" ซึ่งสร้างความสับสนให้กับนักพัฒนามากมาย

  3. การใช้ == แทน ===

    console.log(0 == false); // true
    console.log(0 === false); // false

    การใช้ == อาจทำให้เกิดการเปรียบเทียบที่ไม่คาดคิดเนื่องจากการเปลี่ยนชนิดข้อมูลอัตโนมัติ การใช้ === จะแก้ปัญหานี้ได้เพราะมันจะไม่เปลี่ยนชนิดข้อมูลก่อนเปรียบเทียบ

  4. การลืมใส่ break ใน switch

    switch(day) {
        case 1:
            console.log("Monday");
        case 2:
            console.log("Tuesday");
    }

    เมื่อลืมใส่ break หลังจาก case จะทำให้โปรแกรมรันผ่านทุกกรณีที่เหลือจนจบ ซึ่งอาจทำให้ได้ผลลัพธ์ที่ไม่ถูกต้อง

  5. ฟังก์ชันที่ไม่มี return คืนค่า undefined

    function doSomething() {
        // no return statement
    }
    console.log(doSomething()); // undefined

    หากลืมใส่ return ในฟังก์ชัน จะทำให้ฟังก์ชันนั้นคืนค่า undefined ซึ่งอาจทำให้นักพัฒนาเกิดความสับสน

  6. การลืมว่า this มีค่าเปลี่ยนแปลง

    const obj = {
        name: "John",
        sayHello: function() {
            setTimeout(function() {
                console.log(this.name);
            }, 1000);
        }
    };
    obj.sayHello(); // undefined

    ในตัวอย่างนี้ this ภายในฟังก์ชันที่ถูกส่งให้ setTimeout จะไม่ใช่ obj อีกต่อไป ซึ่งอาจทำให้การเข้าถึงคุณสมบัติของ obj ไม่เป็นไปตามที่คาดหวัง

  7. การเข้าถึง array ที่ไม่มีค่าด้วย undefined

    const arr = [1, 2, 3];
    console.log(arr[5]); // undefined

    เมื่อพยายามเข้าถึงสมาชิกของ array ที่ไม่มีค่า จะได้ค่า undefined แทนที่จะเป็นข้อผิดพลาด ซึ่งอาจทำให้เกิดความสับสนในการตรวจสอบข้อผิดพลาด

  8. การลืมใส่ await ในการเรียกใช้งานฟังก์ชันแบบ asynchronous

    async function fetchData() {
        const result = someAsyncFunction();
        console.log(result); // Promise {<pending>}
    }

    การลืมใส่ await จะทำให้ได้ค่า Promise กลับมาแทนที่จะเป็นผลลัพธ์ที่ต้องการจากฟังก์ชันนั้น

  9. การลืมใส่ ; ท้ายคำสั่ง

    let a = 5
    let b = 10
    let c = a + b
    console.log(c) // 15

    ถึงแม้ว่า JavaScript จะมีการเพิ่มเครื่องหมาย ; ให้โดยอัตโนมัติในหลาย ๆ กรณี (Automatic Semicolon Insertion หรือ ASI) แต่การลืมใส่ ; เองบางครั้งอาจทำให้เกิดพฤติกรรมที่ไม่คาดคิดได้ โดยเฉพาะเมื่อเชื่อมหลายคำสั่งในบรรทัดเดียวหรือใช้รูปแบบที่ ASI ไม่จัดการได้ดี

ปัญหาเหล่านี้เกิดขึ้นบ่อยครั้ง แต่หลายครั้งก็เป็นเรื่องตลกเมื่อมองย้อนกลับไป เพราะส่วนใหญ่เกิดจากการละเลยหรือความเข้าใจผิดเล็ก ๆ น้อย ๆ ของนักพัฒนาเอง