จาก Post ของพี่ Supphachoke Suntiwichaya ใน facebook
เกี่ยวกับการประกาศตัวแปรด้วย keyword const ใน JavaScript 
นั่นหมายความว่าตัวแปรนั้น จะไม่สามารถแก้ไขข้อมูลได้ (Immutable data)
แต่ดันสามารถแก้ไขข้อมูลได้ !!

โดยใน comment มีการอธิบายและ link ต่าง ๆ ไว้เยอะเลย
ดังนั้นขอทำการสรุปและรวบรวมไว้นิดหน่อย เพราะว่า ก็ไม่รู้เรื่องเหมือนกัน

โดยปกติใน JavaScript นั้น

เรามักจะประกาศตัวแปรพร้อมค่า  หรือใช้ keyword var ไปเลย
แต่ใน ES2015 มานั้นจะมี keyword let และ const สำหรับประกาศตัวแปร

โดยที่ keyword const นั้น
หลังจากที่ประกาศและกำหนดค่าไปแล้ว 
จะไม่สามารถประกาศซ้ำและเปลี่ยนแปลงค่าได้
ซึ่งจะเป็นจริงกับ primitive datatype เท่านั้น
แต่จะไม่เป็นจริงกับ non-primitive datatype เช่น object ต่าง ๆ
ยกตัวอย่างกับปัญหาที่เจอจาก Post ต้นทาง

output.png
https://gist.github.com/mrchoke/20e36538bf82918fb7ff2cb24c6de546

คำธิบาย
ตัวแปรนั้นจะทำการเก็บค่าตำแหน่งใน memory ซึ่งชี้ไปยังตำแหน่งเก็บข้อมูลจริง ๆ
โดยประกาศด้วย keyword const นั่นหมายความว่า
ไม่สามารถประกาศตัวแปร numbers ซ้ำได้อีก
ทำให้ค่าของตัวแปรซึ่งเป็นตำแหน่งใน memory ไม่เปลี่ยน (Pass by Reference)
แสดงดังรูป

แต่สามารถเปลี่ยนแปลงข้อมูลของ Array ได้
เนื่องจากค่าของ Array คือตำแหน่งใน memory ที่จัดเก็บข้อมูล
แน่นอนว่าค่าของ Array ไม่ได้ถูกแก้ไขเลย แต่เราไปเปลี่ยนข้อมูลจุดที่ชี้ไปนั่นเอง

แต่ถ้าต้องการไม่ให้แก้ไขค่าจริง ๆ
สามารถใช้งาน Object.freeze() และ immutable.js  ยกตัวอย่างเช่น

มีเรื่องต่าง ๆ ให้ศึกษาอีกเพียบเลย
ขอให้สนุกกับการเขียน code กันนะ

Reference Websites