บางครั้งเราจำเป็นต้องดำเนินการที่แตกต่างกันตามเงื่อนไขที่แตกต่างกัน
ในการทำเช่นนั้น เราสามารถใช้คำสั่ง if
และตัวดำเนินการแบบมีเงื่อนไข ?
ซึ่งเรียกอีกอย่างว่าโอเปอเรเตอร์ "เครื่องหมายคำถาม"
คำสั่ง if(...)
จะประเมินเงื่อนไขในวงเล็บ และหากผลลัพธ์เป็น true
จะดำเนินการบล็อกของโค้ด
ตัวอย่างเช่น:
la year = prompt('ข้อกำหนด ECMAScript-2015 ได้รับการเผยแพร่ในปีใด?', ''); if (ปี == 2015) alert( 'คุณพูดถูก!' );
ในตัวอย่างข้างต้น เงื่อนไขคือการตรวจสอบความเท่าเทียมกันอย่างง่าย ( year == 2015
) แต่อาจซับซ้อนกว่านั้นมาก
หากเราต้องการดำเนินการมากกว่าหนึ่งคำสั่ง เราต้องล้อมบล็อกโค้ดของเราไว้ในวงเล็บปีกกา:
ถ้า (ปี == 2558) { alert( "ถูกต้อง!" ); alert( "คุณฉลาดมาก!" ); -
เราขอแนะนำให้ล้อมบล็อกโค้ดของคุณด้วยเครื่องหมายปีกกา {}
ทุกครั้งที่คุณใช้คำสั่ง if
แม้ว่าจะมีเพียงคำสั่งเดียวที่จะดำเนินการก็ตาม การทำเช่นนี้ช่วยให้อ่านง่ายขึ้น
คำสั่ง if (…)
จะประเมินนิพจน์ในวงเล็บและแปลงผลลัพธ์เป็นบูลีน
มาจำกฎการแปลงจากบทประเภทการแปลง:
หมายเลข 0
, สตริงว่าง ""
, null
, undefined
และ NaN
ทั้งหมดกลายเป็น false
ด้วยเหตุนี้จึงเรียกว่าค่า "เท็จ"
ค่าอื่นๆ เป็น true
จึงเรียกว่า "ความจริง"
ดังนั้นโค้ดภายใต้เงื่อนไขนี้จะไม่ดำเนินการ:
ถ้า (0) { // 0 เป็นเท็จ - -
…และภายใต้เงื่อนไขนี้ – มันจะเป็นเช่นนั้นเสมอ:
ถ้า (1) { // 1 เป็นความจริง - -
นอกจากนี้เรายังสามารถส่งค่าบูลีนที่ประเมินไว้ล่วงหน้าไปที่ if
เช่นนี้:
ให้ cond = (ปี == 2015); // ความเท่าเทียมกันประเมินเป็นจริงหรือเท็จ ถ้า (เงื่อนไข) { - -
คำสั่ง if
อาจมีบล็อก else
ที่เป็นทางเลือก มันดำเนินการเมื่อเงื่อนไขเป็นเท็จ
ตัวอย่างเช่น:
la year = prompt('ข้อกำหนด ECMAScript-2015 ได้รับการเผยแพร่ในปีใด?', ''); ถ้า (ปี == 2558) { alert( 'คุณเดาถูกแล้ว!' ); } อื่น { alert( 'คุณผิดได้ยังไง?' ); // ค่าใดๆ ยกเว้น 2015 -
บางครั้ง เราต้องการทดสอบเงื่อนไขหลายรูปแบบ else if
clause ช่วยให้เราทำเช่นนั้นได้
ตัวอย่างเช่น:
la year = prompt('ข้อกำหนด ECMAScript-2015 ได้รับการเผยแพร่ในปีใด?', ''); ถ้า (ปี < 2558) { alert( 'เร็วเกินไป...' ); } อื่นถ้า (ปี > 2015) { alert( 'สายเกินไป' ); } อื่น { alert( 'แน่นอน!' ); -
ในโค้ดด้านบน JavaScript จะตรวจสอบ year < 2015
ก่อน หากเป็นเท็จ จะไปที่เงื่อนไขถัดไป year > 2015
หากนั่นเป็นเท็จ ก็จะแสดง alert
ครั้งล่าสุด
อาจมี else if
บล็อก สุดท้าย else
เป็นทางเลือก
บางครั้งเราจำเป็นต้องกำหนดตัวแปรตามเงื่อนไข
ตัวอย่างเช่น:
ให้ accessAllowed; ให้อายุ = prompt('คุณอายุเท่าไหร่', ''); ถ้า (อายุ > 18) { อนุญาตการเข้าถึง = จริง; } อื่น { อนุญาตการเข้าถึง = เท็จ; - การแจ้งเตือน (อนุญาตการเข้าถึง);
ตัวดำเนินการที่เรียกว่า "เงื่อนไข" หรือ "เครื่องหมายคำถาม" ช่วยให้เราทำสิ่งนั้นได้ในวิธีที่สั้นและง่ายกว่า
ตัวดำเนินการจะแสดงด้วยเครื่องหมายคำถาม ?
- บางครั้งเรียกว่า "ternary" เนื่องจากตัวดำเนินการมีตัวถูกดำเนินการสามตัว จริงๆ แล้วมันเป็นโอเปอเรเตอร์ตัวเดียวใน JavaScript ซึ่งมีมากมายขนาดนั้น
ไวยากรณ์คือ:
ให้ผลลัพธ์ = เงื่อนไข ? ค่า1 : ค่า2;
condition
ได้รับการประเมิน: หากเป็นจริง value1
จะถูกส่งกลับ มิฉะนั้น – value2
ตัวอย่างเช่น:
ให้ accessAllowed = (อายุ > 18) ? จริง : เท็จ;
ในทางเทคนิคแล้ว เราสามารถละเว้นวงเล็บเมื่อ age > 18
ปี ได้ โอเปอเรเตอร์เครื่องหมายคำถามมีลำดับความสำคัญต่ำ ดังนั้นจึงดำเนินการหลังจากการเปรียบเทียบ >
ตัวอย่างนี้จะทำสิ่งเดียวกันกับตัวอย่างก่อนหน้า:
// ตัวดำเนินการเปรียบเทียบ "อายุ > 18" จะดำเนินการก่อน // (ไม่ต้องใส่วงเล็บ) ให้ accessAllowed = อายุ > 18 ? จริง : เท็จ;
แต่วงเล็บจะทำให้โค้ดอ่านง่ายขึ้น ดังนั้นเราจึงแนะนำให้ใช้วงเล็บเหล่านี้
โปรดทราบ:
ในตัวอย่างข้างต้น คุณสามารถหลีกเลี่ยงการใช้โอเปอเรเตอร์เครื่องหมายคำถามได้ เนื่องจากตัวการเปรียบเทียบจะส่งคืนค่า true/false
:
//เหมือนกัน ให้ accessAllowed = อายุ > 18;
ลำดับของตัวดำเนินการเครื่องหมายคำถาม ?
สามารถคืนค่าที่ขึ้นอยู่กับเงื่อนไขมากกว่าหนึ่งเงื่อนไข
ตัวอย่างเช่น:
ให้อายุ = prompt('age?', 18); ให้ข้อความ = (อายุ < 3) ? 'สวัสดีที่รัก!' - (อายุ < 18) ? 'สวัสดี!' - (อายุ < 100) ? 'สวัสดี!' - 'อายุไม่ธรรมดาจริงๆ!'; แจ้งเตือน( ข้อความ );
ในตอนแรกอาจเป็นเรื่องยากที่จะเข้าใจว่าเกิดอะไรขึ้น แต่หลังจากพิจารณาอย่างละเอียดแล้ว เราจะเห็นว่านี่เป็นเพียงลำดับการทดสอบธรรมดา:
เครื่องหมายคำถามแรกตรวจสอบว่า age < 3
หรือไม่
หากเป็นจริง – จะส่งกลับ 'Hi, baby!'
- มิฉะนั้น จะยังคงแสดงต่อไปหลังเครื่องหมายทวิภาค “:” โดยตรวจสอบ age < 18
.
หากเป็นจริง – จะส่งกลับ 'Hello!'
- มิฉะนั้น จะยังคงแสดงต่อไปหลังเครื่องหมายทวิภาคถัดไป “:” โดยตรวจสอบ age < 100
หากเป็นเช่นนั้นจริง ระบบจะส่งกลับข้อความ 'Greetings!'
- มิฉะนั้น จะยังคงแสดงต่อไปหลังเครื่องหมายทวิภาคสุดท้าย “:” ส่งคืน 'What an unusual age!'
-
นี่คือลักษณะการใช้ if..else
:
ถ้า (อายุ < 3) { message = 'สวัสดีที่รัก!'; } อื่นถ้า (อายุ < 18) { ข้อความ = 'สวัสดี!'; } อื่นถ้า (อายุ < 100) { message = 'สวัสดี!'; } อื่น { message = 'ช่างเป็นวัยที่ไม่ธรรมดาจริงๆ!'; -
บางครั้งเครื่องหมายคำถาม ?
ใช้แทน if
:
ให้ company = prompt('บริษัทไหนสร้าง JavaScript?', ''); (บริษัท == 'เน็ตสเคป') ? alert('ถูกต้อง!') : alert('ผิด');
ขึ้นอยู่กับเงื่อนไข company == 'Netscape'
ไม่ว่าจะเป็นนิพจน์แรกหรือที่สองหลังจาก ?
ได้รับการดำเนินการและแสดงการแจ้งเตือน
เราไม่ได้กำหนดผลลัพธ์ให้กับตัวแปรที่นี่ แต่เรารันโค้ดที่แตกต่างกันไปตามเงื่อนไข
ไม่แนะนำให้ใช้โอเปอเรเตอร์เครื่องหมายคำถามในลักษณะนี้
สัญกรณ์จะสั้นกว่าคำสั่ง if
ที่เทียบเท่า ซึ่งดึงดูดใจโปรแกรมเมอร์บางคน แต่อ่านได้น้อย
นี่คือรหัสเดียวกันที่ใช้ if
เพื่อเปรียบเทียบ:
ให้ company = prompt('บริษัทไหนสร้าง JavaScript?', ''); ถ้า (บริษัท == 'Netscape') { alert('ถูกต้อง!'); } อื่น { alert('ผิด'); -
ดวงตาของเราสแกนโค้ดในแนวตั้ง บล็อกโค้ดที่ขยายหลายบรรทัดจะเข้าใจได้ง่ายกว่าชุดคำสั่งแนวนอนที่ยาว
วัตถุประสงค์ของตัวดำเนินการเครื่องหมายคำถาม ?
คือการส่งคืนค่าหนึ่งหรือค่าอื่นขึ้นอยู่กับเงื่อนไข โปรดใช้มันเพื่อสิ่งนั้นจริงๆ ใช้ if
คุณต้องการรันโค้ดสาขาต่างๆ
ความสำคัญ: 5
alert
จะแสดงหรือไม่?
ถ้า ("0") { alert( 'สวัสดี' ); -
ใช่แล้ว มันจะเป็นเช่นนั้น
สตริงใดๆ ยกเว้นสตริงว่าง (และ "0"
ไม่ว่างเปล่า) จะกลายเป็น true
ในบริบทเชิงตรรกะ
เราสามารถเรียกใช้และตรวจสอบ:
ถ้า ("0") { alert( 'สวัสดี' ); -
ความสำคัญ: 2
ใช้โครงสร้าง if..else
เขียนโค้ดที่ถามว่า: 'ชื่อ JavaScript "อย่างเป็นทางการ" คืออะไร?
หากผู้เยี่ยมชมป้อน “ECMAScript” ให้ส่งออก “Right!” มิฉะนั้น – ส่งออก: “คุณไม่รู้เหรอ? ECMAScript!”
การสาธิตในหน้าต่างใหม่
<!DOCTYPE html> <html> <ร่างกาย> <สคริปต์> 'ใช้อย่างเข้มงวด'; ให้ค่า = prompt ('ชื่อ JavaScript "อย่างเป็นทางการ" คืออะไร?', ''); ถ้า (ค่า == 'ECMAScript') { alert('ถูกต้อง!'); } อื่น { alert("คุณไม่รู้เหรอ? ECMAScript!"); - </สคริปต์> </ร่างกาย> </html>
ความสำคัญ: 2
ใช้ if..else
เขียนโค้ดที่ได้รับตัวเลขผ่าน prompt
จากนั้นแสดงใน alert
:
1
ถ้าค่ามากกว่าศูนย์
-1
ถ้าน้อยกว่าศูนย์
0
ถ้าเท่ากับศูนย์
ในงานนี้ เราถือว่าข้อมูลที่ป้อนเป็นตัวเลขเสมอ
การสาธิตในหน้าต่างใหม่
ให้ value = prompt('พิมพ์ตัวเลข', 0); ถ้า (ค่า > 0) { การแจ้งเตือน( 1 ); } อื่นถ้า (ค่า < 0) { การแจ้งเตือน( -1 ); } อื่น { การแจ้งเตือน( 0 ); -
ความสำคัญ: 5
เขียนสิ่งนี้ใหม่ if
ใช้ตัวดำเนินการแบบมีเงื่อนไข '?'
-
ให้ผล; ถ้า (ก + ข < 4) { ผลลัพธ์ = 'ด้านล่าง'; } อื่น { ผลลัพธ์ = 'เกิน'; -
ให้ผลลัพธ์ = (a + b < 4) ? 'ด้านล่าง' : 'มากกว่า';
ความสำคัญ: 5
เขียนใหม่ if..else
โดยใช้ตัวดำเนินการแบบไตรภาคหลายตัว '?'
-
เพื่อให้อ่านง่าย แนะนำให้แบ่งโค้ดออกเป็นหลายบรรทัด
ให้ข้อความ; ถ้า (เข้าสู่ระบบ == 'พนักงาน') { ข้อความ = 'สวัสดี'; } อื่นถ้า (เข้าสู่ระบบ == 'ผู้อำนวยการ') { ข้อความ = 'สวัสดี'; } อื่นถ้า (เข้าสู่ระบบ == '') { ข้อความ = 'ไม่มีการเข้าสู่ระบบ'; } อื่น { ข้อความ = ''; -
ให้ข้อความ = (เข้าสู่ระบบ == 'พนักงาน') ? 'สวัสดี' : (เข้าสู่ระบบ == 'ผู้อำนวยการ') ? 'สวัสดี' : (เข้าสู่ระบบ == '') ? 'ไม่มีการเข้าสู่ระบบ' : -