Template Literals และ Optional Chaining
ฝังนิพจน์ในสตริงด้วย template literals เข้าถึงคุณสมบัติที่ซ้อนกันอย่างปลอดภัยด้วย ?. และหยุดประเมินต่อเมื่อพบค่าที่เป็น null หรือ undefined ด้วยตัวดำเนินการ ??
Template Literals และ Optional Chaining เป็นบทเรียน Frontend Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Frontend Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Frontend Academy มีบทเรียนทั้งหมด 4 บทเรียน
ลิเทอรัลแม่แบบ: สตริงในเครื่องหมายแบ็กทิก
ลิเทอรัลแม่แบบ (สตริงในเครื่องหมายแบ็กทิก) รองรับสตริงหลายบรรทัดและนิพจน์ที่ฝังอยู่ ใช้แทนการต่อสตริงด้วย + และทำให้เจตนาของโค้ดชัดเจนขึ้น
// String concatenation (old way):
const msg = 'Hello, ' + name + '! You have ' + count + ' messages.';
// Template literal (modern):
const msg2 = `Hello, ${name}! You have ${count} messages.`;ลิเทอรัลแม่แบบหลายบรรทัด
ลิเทอรัลแม่แบบจะคงการขึ้นบรรทัดใหม่และการเยื้องไว้ ไม่ต้องใช้ \n หรือต่อสตริงข้ามหลายบรรทัดอีกต่อไป
const html = `
<div class="card">
<h2>${title}</h2>
<p>${body}</p>
</div>
`;
const sql = `
SELECT *
FROM users
WHERE age > ${minAge}
ORDER BY name
`;นิพจน์ในลิเทอรัลแม่แบบ
นิพจน์ JavaScript ใด ๆ สามารถอยู่ภายใน ${} ได้ ไม่ว่าจะเป็นตัวดำเนินการแบบสามทาง การเรียกฟังก์ชัน การคำนวณ หรือการเรียกเมธอด
const tax = 0.2;
const price = 50;
const receipt = `
Subtotal: $${price}
Tax (${tax * 100}%): $${price * tax}
Total: $${price * (1 + tax)}
${isPaid ? 'PAID' : 'UNPAID'}
`;ลิเทอรัลแม่แบบที่ติดแท็ก
เทมเพลตที่ติดแท็กจะเรียกใช้ฟังก์ชันโดยส่งส่วนของสตริงและค่าที่แทรกไว้เป็นอาร์กิวเมนต์ ใช้โดยไลบรารีอย่าง styled-components, GraphQL (gql``) และ sql`` เพื่อสร้างคำสั่งสอบถามอย่างปลอดภัย
function highlight(strings, ...values) {
return strings.reduce((acc, str, i) =>
acc + str + (values[i] !== undefined ? `<mark>${values[i]}</mark>` : ''), '');
}
const msg = highlight`Hello ${name}, you have ${count} messages.`;การเชื่อมโยงแบบเลือกได้: ?.
ตัวดำเนินการเชื่อมโยงแบบเลือกได้ ?. จะหยุดการประเมินและส่งคืน undefined แทนการทำให้เกิด TypeError หากด้านซ้ายมีค่าเป็น null หรือ undefined ช่วยตัดการตรวจสอบค่า null แบบป้องกันออกไป
const user = null;
// Without optional chaining (throws TypeError):
// user.profile.avatar
// With optional chaining (returns undefined):
const avatar = user?.profile?.avatar;
console.log(avatar); // undefined — no errorการเรียกเมธอดแบบเลือกได้
obj?.method() จะเรียกเมธอดก็ต่อเมื่อ obj ไม่เป็น null หรือ undefined หาก obj เป็น null ระบบจะส่งคืน undefined โดยไม่ทำให้เกิดข้อผิดพลาด
const timer = getTimer(); // might return null
timer?.start(); // only calls start() if timer exists
// Also works on array access:
const firstItem = arr?.[0]; // undefined if arr is nullการรวมค่า nullish: ??
ตัวดำเนินการรวมค่า nullish ?? จะส่งคืนค่าด้านขวาก็ต่อเมื่อค่าด้านซ้ายเป็น null หรือ undefined (ไม่ใช่เพียงค่าที่เป็นเท็จ) ต่างจาก || ตรงที่ 0 หรือ '' จะไม่ถูกถือว่าเป็นค่า nullish
const port = config.port ?? 3000; // 3000 only if port is null/undefined
const name = user.name ?? 'Anonymous';
// Compare with ||:
console.log(0 ?? 'default'); // 0 (not nullish)
console.log(0 || 'default'); // 'default' (falsy!)การกำหนดค่า nullish: ??=
a ??= b จะกำหนด b ให้กับ a ก็ต่อเมื่อ a เป็น null หรือ undefined เป็นรูปแบบย่อของ a = a ?? b มีประโยชน์สำหรับกำหนดค่าเริ่มต้นให้พร็อพเพอร์ตีของออบเจ็กต์ตามเงื่อนไข
let cache = {};
function getUser(id) {
cache[id] ??= fetchUser(id); // only fetch if not cached
return cache[id];
}ตัวดำเนินการกำหนดค่าเชิงตรรกะ
&&= จะกำหนดค่าก็ต่อเมื่อด้านซ้ายเป็นจริง ||= จะกำหนดค่าก็ต่อเมื่อด้านซ้ายเป็นเท็จ เมื่อนำมาใช้ร่วมกับ ??= ตัวดำเนินการเหล่านี้จะทำให้การกำหนดค่าตามเงื่อนไขกระชับขึ้น
user.name ||= 'Anonymous'; // set if falsy
user.role &&= user.role.toLowerCase(); // transform if existsการใช้ ?. และ ?? ร่วมกัน
ใช้การเชื่อมโยงแบบเลือกได้ร่วมกับการรวมค่า nullish เพื่อเข้าถึงพร็อพเพอร์ตีอย่างปลอดภัยพร้อมกำหนดค่าเริ่มต้น
const city = user?.address?.city ?? 'Unknown';
const total = cart?.items?.length ?? 0;เมธอดสตริงที่ควรรู้
เมธอดสตริงที่ใช้บ่อย ได้แก่ trim(), trimStart(), trimEnd(), padStart(), padEnd(), startsWith(), endsWith(), includes(), replaceAll() และ at()
const str = ' Hello World ';
str.trim(); // 'Hello World'
str.includes('World'); // true
'5'.padStart(3, '0'); // '005'
'abc'.at(-1); // 'c'
'aabbcc'.replaceAll('b', 'x'); // 'aaxxcc'ตรวจสอบความเข้าใจ
หาก obj เป็น null นิพจน์ const val = obj?.foo?.bar ?? 'default' จะส่งคืนอะไร
ทบทวน: ลิเทอรัลแม่แบบและการเชื่อมโยงแบบเลือกได้
สตริงในเครื่องหมายแบ็กทิกรองรับนิพจน์และหลายบรรทัด เทมเพลตที่ติดแท็กช่วยให้สร้างภาษาเฉพาะโดเมนได้ ?. ช่วยเข้าถึงพร็อพเพอร์ตีอย่างปลอดภัยโดยไม่ต้องตรวจสอบค่า null ?? กำหนดค่าเริ่มต้นเมื่อค่าเป็น null หรือ undefined (ไม่ใช่เพียงค่าที่เป็นเท็จ) ใช้ทั้งสองอย่างร่วมกันเพื่อเข้าถึงข้อมูลอย่างปลอดภัย อ่านง่าย และมีค่าเริ่มต้น
คำถามที่พบบ่อย
บทเรียน “Template Literals และ Optional Chaining” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “Template Literals และ Optional Chaining” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Frontend Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Frontend Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “Template Literals และ Optional Chaining”
ฝังนิพจน์ในสตริงด้วย template literals เข้าถึงคุณสมบัติที่ซ้อนกันอย่างปลอดภัยด้วย ?. และหยุดประเมินต่อเมื่อพบค่าที่เป็น null หรือ undefined ด้วยตัวดำเนินการ ?? คุณปฏิบัติ Frontend Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Frontend Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Frontend Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “Template Literals และ Optional Chaining” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Frontend Academy นี้ได้ไหม
ได้ บทเรียน Frontend Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เมธอด Array: map, filter, reduce และ find
- การแยกโครงสร้างออบเจ็กต์และ Spread
- Template Literals และ Optional Chaining
- โมดูล: import และ export