Javascript มาพร้อมกับการสนับสนุน พารามิเตอร์เริ่มต้น ดั้งเดิมด้วย ES2015 ตรงกันข้ามกับสิ่งที่เราคิด ไม่ใช่เพียงการแทนที่วากยสัมพันธ์สำหรับ||
(ตัวดำเนินการเชิงตรรกะ OR)
Javascript ก่อนพารามิเตอร์เริ่มต้น
ก่อนที่จะมีการสนับสนุนพารามิเตอร์เริ่มต้น เราอาจเขียนดังนี้:
เพื่อให้เข้าใจโค้ดที่ตัดมาข้างต้น เราต้องคำนึงถึงสิ่งต่อไปนี้:
- ความจริง/เท็จ: ค่าในจาวาสคริปต์สามารถจัดหมวดหมู่ได้เป็น "ความจริง" หรือ "เท็จ" พูดง่ายๆ ก็คือ Javascript พยายามแปลงตัวแปรให้เป็นค่าบูลีน เพื่อหาเงื่อนไข (เช่น ถ้า สำหรับลูป)
- การประเมินการลัดวงจร:นิพจน์ที่เกี่ยวข้องกับ
||
จะถูกประมวลผลจากซ้ายไปขวา ขณะประมวลผลจากซ้ายไปขวา คอมไพเลอร์ฉลาดพอที่จะไม่ประมวลผลรายการที่เหลือหากพบค่า ความจริง (อ้างอิง: Short Circuiting)
กล่าวโดยสรุป นี่เป็นเพียงน้ำตาลวากยสัมพันธ์สำหรับ:
เหตุผลที่วิธีนี้แพร่หลายมากก็คือ คุณสามารถโยง ||
หลายอันเข้าด้วยกันได้ และปล่อยให้การลัดวงจรจัดการไป ลองนึกภาพการเขียนสิ่งเดียวกันด้วย คำสั่ง if
ตอนนี้หากตัวแปร evil
ของคุณเป็นสตริงว่าง ''
หรือค่า falsy ใดๆ ฟังก์ชันด้านบนจะถือว่าเป็น darth vader
นี่อาจเป็นเรื่องปกติในกรณีส่วนใหญ่ แต่อาจทำให้เกิดข้อบกพร่องที่ไม่โต้ตอบอันน่าสะพรึงกลัวในแอปพลิเคชันที่เกี่ยวข้องมากขึ้น การค้นหาสแต็กโอเวอร์โฟลว์อย่างง่ายเพื่อแก้ไขปัญหานี้ส่งผลให้เกิดวิธีแก้ปัญหาที่ยอดเยี่ยมจำนวนมาก และ พารามิเตอร์เริ่มต้น ที่หรูหราที่สุด
Javascript หลังจากพารามิเตอร์เริ่มต้น
ให้เราใช้ตัวอย่าง filterEvil เดียวกันและดูว่ามันจะดูเป็นอย่างไรเมื่อใช้พารามิเตอร์เริ่มต้น
เมื่อมองแวบแรกจะดูเรียบร้อยและรัดกุม แต่อย่าปล่อยให้รูปลักษณ์หลอกลวงคุณ! มีอะไรมากมายเกิดขึ้นภายใต้ประทุน คงจะเป็นเรื่องไร้สาระที่จะถือว่าค่าเริ่มต้นจะเข้ามาเมื่อใดก็ตามที่ evil
ว่างเปล่า
ให้เราดูรายละเอียดที่สำคัญบางประการ
1. Dความแตกต่างระหว่าง null และ unknown
Javascript มีสองคำตอบสำหรับปัญหา ไม่ ปัจจุบัน คือ null
และ undefined
( null
เป็นหัวข้อ "ข้อโต้แย้ง") ฉันทามติทั่วไปคือ null
เป็นค่าที่ชัดเจนเพื่อบอกว่าไม่มีค่า ในตัวอย่างด้านล่าง เราพยายามส่ง null
เป็นอาร์กิวเมนต์
ฟังก์ชัน filterEvil จะไม่แทนที่
evil
ด้วยค่าเริ่มต้นเมื่อระบุด้วยnull
หรือค่าเท็จใดๆ
ฟังก์ชัน filterEvil จะทดแทนก็ต่อเมื่อ evil
เป็น undefined
เท่านั้น ตอนนี้คุณโชคดีแล้ว เนื่องจาก Javascript จะใช้ undefined
โดยอัตโนมัติ หากคุณไม่ผ่านการโต้แย้งอย่างชัดเจน:
นี่คือสิ่งที่ควรคำนึงถึงเมื่อทำงานในโครงการที่ต้องอาศัย null
เป็นอย่างมาก(แม้ว่าฉันจะกังวลมากเกี่ยวกับนักพัฒนาซอฟต์แวร์ที่ใช้null
/undefined
สลับกันได้ )
2. ประเมินจากซ้ายไปขวา
พารามิเตอร์เริ่มต้นจะได้รับการประเมินจากซ้ายไปขวา นี่เป็นคุณสมบัติที่น่าสับสน แต่เป็นคุณสมบัติที่ทรงพลังมาก เรามาดูตัวอย่างกันดีกว่า
อย่างที่คุณเห็น เราสามารถใช้พารามิเตอร์ทางด้านซ้ายซ้ำเป็นพารามิเตอร์เริ่มต้นสำหรับบางอย่างทางด้านขวาได้ โปรดทราบว่า respect
จะได้รับพารามิเตอร์ evil
โดยใช้การตรวจสอบเริ่มต้น
3. การเรียกใช้ฟังก์ชัน
คุณยังสามารถเรียกใช้ฟังก์ชันและใช้ค่าที่ส่งคืนเป็นพารามิเตอร์เริ่มต้นได้ กล่าวโดยสรุป สิ่งนี้ช่วยให้คุณสามารถเรียกใช้ฟังก์ชันปกติและคำนวณพารามิเตอร์เริ่มต้นได้ทันที
4. ประเมิน ณ เวลาโทร
ตอนนี้ฟีเจอร์นี้เป็นสิ่งที่ทำให้ฉันสับสนมากที่สุด เรามาดูตัวอย่างกันดีกว่า
แต่ละครั้งที่คุณเรียกอาร์เรย์โดยไม่มีอาร์กิวเมนต์ อินสแตนซ์ใหม่ของอาร์เรย์ว่างจะถูกสร้างขึ้น
แต่ละครั้งที่คุณเรียก filterEvil โดยไม่มีอาร์กิวเมนต์ จะมีการสร้างอินสแตนซ์ใหม่ของอาร์เรย์ว่าง ตอนนี้นี่อาจกลายเป็นปัญหาได้หากคุณสนใจ "ตัวเลือก" และการบันทึกช่วยจำ พฤติกรรมนี้สามารถหลอกตรรกะที่ต้องพึ่งพาของคุณได้อย่างง่ายดายโดยคิดว่ามีบางอย่างเปลี่ยนไป (ฉันกำลังคุยกับคุณ React) ตัวอย่างเช่น หากคุณใช้การเลือกซ้ำในโปรเจ็กต์การโต้ตอบ ส่วนประกอบของคุณสามารถอัปเดตโดยไม่จำเป็นได้ เนื่องจากการตอบสนองจะแสดงผลอีกครั้งพร้อมกับอินสแตนซ์ใหม่ของอาร์เรย์ว่าง
เคล็ดลับเด็ดมีดังนี้:
- การตรวจสอบพารามิเตอร์ที่จำเป็น:คุณสามารถใช้พารามิเตอร์เริ่มต้นเพื่อ บังคับใช้พารามิเตอร์ที่จำเป็น ในตัวอย่างด้านล่าง เรากำลังบังคับใช้ ความชั่วร้าย เป็นอุปกรณ์ประกอบฉากที่จำเป็น
- พารามิเตอร์เริ่มต้นที่ทำลายโครงสร้าง:คุณยังสามารถใช้พารามิเตอร์เริ่มต้นในนิพจน์ที่ถูกทำลายได้
ฉันหวังว่าโพสต์นี้จะช่วยคุณในการทำความเข้าใจพารามิเตอร์เริ่มต้น
หากคุณพบว่าบทความนี้มีประโยชน์ ขอปรบมือให้ฉันบ้าง 👏
ติดต่อฉันทาง Twitter @kushan2020