Javaสคริปต์ตัวแปร: ประกาศ กำหนดค่า พร้อมตัวอย่าง

⚡ สรุปอย่างชาญฉลาด

Javaตัวแปรในสคริปต์ใช้สำหรับเก็บค่าต่างๆ เช่น ชื่อและตัวเลข หรือผลลัพธ์ของนิพจน์ การประกาศตัวแปรด้วย var, let หรือ const จะเป็นการจองช่องข้อมูลที่มีชื่อ ซึ่งส่วนที่เหลือของสคริปต์สามารถอ่านและอัปเดตได้

  • 🔘 ประกาศ: คำสำคัญ var, let หรือ const จะสร้างชื่อตัวแปรขึ้นมาก่อนที่โค้ดจะอ่านหรือเขียนค่าใดๆ ลงไป
  • ☑️ งานที่มอบหมาย: เครื่องหมายเท่ากับตัวเดียวจะคัดลอกค่าลงในตัวแปร ไม่ว่าจะในบรรทัดการประกาศหรือในภายหลังก็ตาม
  • การตั้งชื่อ: ชื่อจะขึ้นต้นด้วยตัวอักษร เครื่องหมายดอลลาร์ หรือเครื่องหมายขีดล่าง และตัวอักษรพิมพ์ใหญ่และพิมพ์เล็กถือว่าแตกต่างกัน
  • 🧪 คำหลักสมัยใหม่: คำสั่ง `const` เหมาะสำหรับค่าที่ไม่เปลี่ยนแปลง คำสั่ง `let` เหมาะสำหรับค่าที่เปลี่ยนแปลงได้ และคำสั่ง `var` ยังคงใช้กันอยู่ส่วนใหญ่ในสคริปต์แบบเก่า
  • 🛠️ ขอบเขต: คำสั่ง `let` และ `const` จะอยู่ภายในวงเล็บปีกกาที่ล้อมรอบ ในขณะที่ `var` จะครอบคลุมฟังก์ชันโดยรอบทั้งหมด
  • 📌 ความผิดพลาดทั่วไป: การกำหนดค่าใหม่ให้กับค่าคงที่ การอ่านค่า let เร็วเกินไป หรือการละเว้นคำหลัก จะทำให้เกิดข้อผิดพลาดที่แตกต่างกัน

การประกาศ Javaตัวแปรสคริปต์และการกำหนดค่าให้กับตัวแปรนั้น

ตัวแปรใช้สำหรับเก็บค่า (name = “John”) หรือนิพจน์ (sum = x + y) ทุกค่าที่สคริปต์เก็บไว้ใช้ในภายหลัง ไม่ว่าจะเป็นชื่อผู้ใช้ ผลรวมที่คำนวณได้ หรือสถานะใช่/ไม่ใช่ ล้วนอยู่ในตัวแปร ดังนั้นการประกาศและการตั้งชื่อตัวแปรให้ดีจึงเป็นทักษะแรกที่ควรเรียนรู้ Javaต้นฉบับ.

ประกาศตัวแปรใน Javaต้นฉบับ

ก่อนที่จะใช้ตัวแปร คุณต้องประกาศตัวแปรนั้นก่อน โดยใช้คำหลัก `var` ในการประกาศตัวแปร ดังนี้:

var name;

การประกาศตัวแปรเพียงอย่างเดียวสร้างชื่อตัวแปรขึ้นมาเท่านั้น ไม่มีอะไรเพิ่มเติม ในขั้นตอนนี้ ตัวแปรมีอยู่แล้ว แต่มีค่าพิเศษคือ "undefined" เนื่องจากยังไม่มีการใส่ค่าใดๆ ลงไป

⚠️ หมายเหตุเกี่ยวกับเวอร์ชัน: `var` เป็นคำหลักในการประกาศตัวแปรแบบดั้งเดิมและยังคงใช้งานได้ในทุกเบราว์เซอร์ (ES6 ปี 2015) เพิ่มเข้ามา ให้ และ constซึ่งเป็นคำสำคัญที่ทันสมัย Javaสคริปต์ใช้ตัวแปร var สองตัวนี้ โดยจะเปรียบเทียบกับตัวแปร var ที่อยู่ด้านล่างของหน้านี้

กำหนดค่าให้กับตัวแปร

คุณสามารถกำหนดค่าให้กับตัวแปรในขณะที่ประกาศตัวแปรหรือหลังจากประกาศตัวแปรแล้ว

var name = "John";

OR

var name;

name = "John";

ทั้งสองรูปแบบให้ผลลัพธ์เหมือนกัน เครื่องหมายเท่ากับตัวเดียวคือ ผู้ดำเนินการมอบหมาย: มันคัดลอกค่าทางด้านขวาไปยังตัวแปรทางด้านซ้าย มันไม่ใช่การทดสอบความเท่าเทียมกัน ซึ่งเขียนว่า == หรือ === และควรอยู่ในหมวดหมู่อื่น คำสั่งแบบมีเงื่อนไข.

การตั้งชื่อตัวแปร

ถึงแม้คุณจะตั้งชื่อตัวแปรได้ตามใจชอบ แต่การเขียนโปรแกรมที่ดีควรตั้งชื่อตัวแปรให้มีความหมายและสื่อความหมายได้ดี ยิ่งไปกว่านั้น ชื่อตัวแปรควรขึ้นต้นด้วยตัวอักษร และต้องตรงตามตัวพิมพ์ใหญ่-เล็ก ดังนั้น ตัวแปร studentname และ studentName จึงแตกต่างกัน เพราะตัวอักษร n ในชื่อต่างกัน (n และ N)

มีกฎสี่ข้อที่ใช้ตัดสินว่าชื่อนั้นถูกต้องตามกฎหมายหรือไม่:

  1. อักขระตัวแรกต้องเป็นตัวอักษร เครื่องหมายดอลลาร์ หรือเครื่องหมายขีดล่างเท่านั้น ห้ามเป็นตัวเลขเด็ดขาด
  2. หลังจากอักขระตัวแรกแล้ว สามารถใช้ตัวอักษร ตัวเลข เครื่องหมายดอลลาร์ และเครื่องหมายขีดล่างได้ทั้งหมด
  3. ไม่อนุญาตให้เว้นวรรค ดังนั้นคำสองคำจึงถูกรวมเข้าด้วยกันเป็น studentName แทนที่จะแยกเป็นสองคำ
  4. คำสงวน เช่น var, let, const, class และ return ไม่สามารถนำมาใช้ซ้ำเป็นชื่อได้

ตามธรรมเนียมปฏิบัติ Javaชื่อสคริปต์ใช้รูปแบบ camelCase กล่าวคือ คำแรกเป็นตัวพิมพ์เล็ก และคำต่อๆ ไปจะขึ้นต้นด้วยตัวพิมพ์ใหญ่ เช่น firstName, totalPrice, isLoggedIn

สคริปต์ด้านล่างนี้ประกาศตัวแปรสองตัว ใช้ตัวดำเนินการทางคณิตศาสตร์ทั้งห้ากับตัวแปรเหล่านั้น และเขียนผลลัพธ์แต่ละตัวลงบนหน้าเว็บ ลองทำด้วยตัวเองดู:

<html>
<head>
<title>Variables!!!</title>
<script type="text/javascript">
var one = 22;
var two = 3;
var add = one + two;
var minus = one - two;
var multiply = one * two;
var divide = one/two;
	document.write("First No: = " + one + "<br />Second No: = " + two + " <br />");
	document.write(one + " + " + two + " = " + add + "<br/>");
	document.write(one + " - " + two + " = " + minus + "<br/>");
	document.write(one + " * " + two + " = " + multiply + "<br/>");
	document.write(one + " / " + two + " = " + divide + "<br/>");
</script>
</head>
<body>
</body>
</html>

var, let และ const ใน Modern Javaต้นฉบับ

มีเพียงตัวแปร var เท่านั้นที่มีอยู่เมื่อ Javaสคริปต์ถูกเขียนขึ้นครั้งแรก และมีสองนิสัยที่อาจทำให้ผู้เริ่มต้นประหลาดใจ คือ สามารถประกาศซ้ำได้โดยไม่แสดงข้อความแจ้งเตือน และไม่สนใจขอบเขตของบล็อก คำสั่ง `let` และ `const` ถูกเพิ่มเข้ามาเพื่อแก้ไขทั้งสองอย่างนี้ ตารางด้านล่างแสดงคำหลักทั้งสามคำไว้เคียงข้างกัน

พฤติกรรม คือ ให้ const
ขอบเขต ฟังก์ชันทั้งหมด บล็อกล้อมรอบ บล็อกล้อมรอบ
สามารถโอนย้ายได้ มี (ใบกำกับภาษีเต็มรูปแบบ) มี (ใบกำกับภาษีเต็มรูปแบบ) ไม่
สามารถประกาศซ้ำได้ในขอบเขตเดียวกัน มี (ใบกำกับภาษีเต็มรูปแบบ) ไม่ ไม่
มูลค่าที่ต้องระบุในช่องสำแดงสินค้า ไม่ ไม่ มี (ใบกำกับภาษีเต็มรูปแบบ)
อ่านก่อนการประกาศ ส่งคืนค่าที่ไม่กำหนด ข้อผิดพลาดในการอ้างอิง ข้อผิดพลาดในการอ้างอิง

นิสัยง่ายๆ เพียงอย่างเดียวก็ครอบคลุมเกือบทุกกรณี: เอื้อมมือไปหยิบ const ขั้นแรก ให้เปลี่ยนไปใช้ ให้ ในขณะที่ค่าจำเป็นต้องเปลี่ยนแปลงอย่างแท้จริง เช่น ค่าตัวนับภายในอุปกรณ์ใดอุปกรณ์หนึ่ง Javaลูปสคริปต์และเก็บตัวแปร var ไว้สำหรับอ่านโค้ดเก่าแทนที่จะเขียนโค้ดใหม่

ขอบเขตการทำงานที่ปรับเปลี่ยนได้และการยกใน Javaต้นฉบับ

ขอบเขต (Scope) จะกำหนดว่าส่วนใดของสคริปต์สามารถมองเห็นตัวแปรได้ การประกาศตัวแปรด้วย `var` จะเป็นของฟังก์ชันที่บรรจุตัวแปรนั้น ดังนั้นมันจึงไม่ถูกรบกวนจากบล็อก `if` หรือ `for` ภายในฟังก์ชันนั้น การประกาศตัวแปรด้วย `let` หรือ `const` จะเป็นของวงเล็บปีกกาคู่ที่มันอยู่ภายใน และจะไม่ถูกรบกวนเมื่ออยู่นอกวงเล็บปีกกาเหล่านั้น

function demo() {
  if (true) {
    var wide = "visible throughout demo()";
    let narrow = "visible only inside these braces";
  }
  console.log(wide);
  console.log(narrow);
}

คำสั่ง console.log แรกแสดงข้อความออกมา ส่วนคำสั่ง console.log ที่สองจะเกิดข้อผิดพลาด ReferenceError เนื่องจากตัวแปร narrow ไม่มีอยู่แล้วเมื่อบล็อก if สิ้นสุดลง

hoisting เป็นครึ่งหลังของเรื่องราว Javaสคริปต์จะลงทะเบียนการประกาศทุกรายการในขอบเขตก่อนที่จะรันบรรทัดใดๆ ในขอบเขตนั้น ชื่อตัวแปร var จะถูกลงทะเบียนและตั้งค่าเป็น undefined ดังนั้นการอ่านค่าก่อนกำหนดจึงถูกต้องตามกฎหมายแต่ไม่มีประโยชน์ ชื่อ let หรือ const จะถูกลงทะเบียนโดยไม่มีค่า และช่องว่างระหว่างส่วนบนสุดของบล็อกกับบรรทัดการประกาศเรียกว่า `\n` โซนตายชั่วคราว.

console.log(a);
var a = 1;

console.log(b);
let b = 2;

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

ข้อผิดพลาดทั่วไปเมื่อทำการประกาศ Javaตัวแปรสคริปต์

ข้อความห้าข้อความนี้คิดเป็นส่วนใหญ่ของข้อความที่แสดงในคอนโซลสำหรับผู้เริ่มต้นเรียนรู้เรื่องตัวแปร แต่ละข้อความระบุสาเหตุที่เฉพาะเจาะจง ดังนั้นวิธีแก้ไขมักจะใช้เพียงบรรทัดเดียว

ข้อความคอนโซล ก่อให้เกิด แก้ไขปัญหา
ข้อผิดพลาดทางไวยากรณ์: ตัวระบุ 'x' ได้ถูกประกาศไปแล้ว ใช้คำสั่ง let หรือ const สองครั้งสำหรับชื่อเดียวกันในบล็อกเดียวกัน ใช้ตัวแปรที่มีอยู่แล้ว หรือเปลี่ยนชื่อตัวแปรตัวที่สอง
TypeError: การกำหนดให้กับตัวแปรคงที่ ค่าคงที่ได้รับค่าใหม่ ถ้าค่าของตัวแปรต้องเปลี่ยนแปลง ให้ประกาศตัวแปรด้วยคำสั่ง `let`
ReferenceError: ไม่สามารถเข้าถึง 'x' ก่อนการเริ่มต้นใช้งานได้ มีการอ่านค่า let หรือ const ภายในโซนเวลาที่หยุดนิ่ง ย้ายค่าที่อ่านได้ไปไว้ด้านล่างบรรทัดการประกาศ
ReferenceError: x ไม่ได้ถูกกำหนดไว้ ชื่อดังกล่าวไม่เคยถูกประกาศ หรือไม่ก็สะกดผิด ระบุให้ชัดเจน หรือแก้ไขการสะกดและการใช้ตัวพิมพ์ใหญ่-เล็ก
คำว่า undefined ปรากฏขึ้นในตำแหน่งที่คาดว่าจะแสดงค่า ตัวแปรถูกประกาศไว้ แต่ไม่เคยถูกกำหนดค่า กำหนดค่าก่อนการอ่านครั้งแรก

การเพิ่ม “use strict” ไว้ด้านบนสุดของไฟล์ จะเปลี่ยนเวอร์ชันเงียบของกรณีที่สี่ — การกำหนดค่าให้กับชื่อที่ไม่เคยประกาศมาก่อน — ให้กลายเป็นข้อผิดพลาดที่มองเห็นได้ ซึ่งเป็นเหตุผลว่าทำไมจึงควรมีอยู่ในทุกสคริปต์ใหม่ กฎตัวแปรเดียวกันนี้ยังคงใช้ได้โดยไม่เปลี่ยนแปลง อาร์เรย์, วัตถุและโค้ดฝั่งเซิร์ฟเวอร์ที่เขียนขึ้นสำหรับ Node.js.

คำถามที่พบบ่อย

คนใดก็ได้ในนั้น Javaสคริปต์มีการกำหนดประเภทแบบไดนามิก ดังนั้นตัวแปรหนึ่งอาจเก็บค่าเป็นตัวเลข จากนั้นเป็นสตริง จากนั้นเป็นอ็อบเจ็กต์ การประกาศตัวแปรเป็นการจองชื่อ ไม่ใช่ประเภท ใช้คำสั่ง `typeof` เพื่อตรวจสอบว่าตัวแปรเก็บค่าอะไรในแต่ละช่วงเวลา

Javaสคริปต์สร้างตัวแปรส่วนกลางโดยปริยาย ซึ่งโค้ดส่วนอื่นอาจเขียนทับโดยไม่ได้ตั้งใจ การเพิ่ม "use strict" ไว้ที่ด้านบนของไฟล์จะเปลี่ยนบรรทัดเดียวกันนั้นให้กลายเป็น ReferenceError ทำให้ข้อผิดพลาดปรากฏขึ้นทันทีแทนที่จะค่อยๆ แพร่กระจายไปโดยไม่แสดงข้อผิดพลาด

undefined หมายถึงตัวแปรถูกประกาศไว้ แต่ไม่เคยได้รับค่า null คือค่าที่คุณกำหนดโดยเจตนาเพื่อหมายถึง "ไม่มีอะไรอยู่ตรงนี้" ทั้งสองค่าเป็นค่าเท็จ แต่ typeof undefined จะคืนค่า "undefined" ในขณะที่ typeof null จะคืนค่า "object"

ตัวดำเนินการบวกใช้สำหรับเชื่อมข้อความเมื่อด้านใดด้านหนึ่งเป็นสตริง ดังนั้น 22 + “3” จะได้ผลลัพธ์เป็น “223” ควรแปลงค่าด้วย Number() หรือ parseInt() ก่อนเมื่อต้องการคำนวณทางคณิตศาสตร์traction ไม่มีความหมายในข้อความ ดังนั้น “3” − 1 จึงคืนค่าเป็น 2 อย่างถูกต้อง

ใช่แล้ว `const` จะล็อกการผูกข้อมูล ไม่ใช่ค่า ดังนั้นคุณสมบัติของอ็อบเจ็กต์ `const` และองค์ประกอบของอาร์เรย์ `const` ยังคงสามารถเปลี่ยนแปลงได้ การกำหนดค่าใหม่ให้กับตัวแปรนั้นจะทำให้เกิดข้อผิดพลาด `TypeError` ควรใช้ `Object.freeze()` เมื่อต้องการให้เนื้อหาคงที่

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

บ่อยครั้งก็ใช่ Copilot อ่านโค้ดที่อยู่ใกล้เคียงและเสนอชื่อที่ตรงกับรูปแบบโดยรอบ ซึ่งช่วยในการแทนที่ตัวยึดตำแหน่ง เช่น x หรือ temp Revตรวจสอบชื่อทุกชื่อ เพราะคำแนะนำที่ฟังดูดีอาจยังอธิบายสิ่งที่ผิดพลาดได้

console.log() จะแสดงค่าปัจจุบันในคอนโซลของเบราว์เซอร์ หากต้องการดูรายละเอียดเพิ่มเติม ให้ตั้งเบรกพอยต์ในแผง Sources ของ DevTools แล้ววางเมาส์เหนือชื่อ หรือเพิ่มลงในรายการ Watch เพื่ออ่านค่าที่บรรทัดนั้นโดยตรง

สรุปโพสต์นี้ด้วย: