ตัวแปร JavaScript มีการพิมพ์แบบหลวม / แบบไดนามิกและภาษาไม่สนใจว่าจะมีการประกาศหรือเปลี่ยนแปลงค่าอย่างไร
2017. 08. 22: บทความนี้ได้รับการอัปเดตเพื่อให้สอดคล้องกับสถานะปัจจุบันของระบบนิเวศ JavaScript
ให้ x;x = 1; // x คือตัวเลขx = '1'; // x เป็นสตริงx = [1]; // x เป็นอาร์เรย์
ค่าที่แตกต่างกันดูเหมือนจะเท่ากับ จริง
เมื่อเทียบกับ ==
(ความเสมอภาคแบบหลวมหรือนามธรรม) เนื่องจาก JavaScript (มีประสิทธิภาพ) แปลงแต่ละอันให้เป็นสตริงแทนก่อนการเปรียบเทียบ:
// ทั้งหมดเป็นความจริง1 == '1';1 == [1];'1' == [1];
ผลที่ได้คือ เท็จ
เกิดขึ้นเมื่อเทียบกับ ===
(ความเท่าเทียมกันอย่างเคร่งครัด) เนื่องจากมีการพิจารณาชนิด:
// ทั้งหมดเท็จ1 === '1';1 === [1];'1' === [1];
ภายใน Semalt ตั้งค่าให้เป็นหนึ่งในหกชนิดข้อมูลดั้งเดิม:
- ยังไม่ได้ระบุ (ตัวแปรที่ไม่มีค่าที่กำหนด)
- Null (ค่า null เดียว)
- บูลีน (จริงหรือเท็จ)
- จำนวน (รวมถึง
อินฟินิตี้
และ NaN
- ไม่ใช่ตัวเลข!) - สตริง (ข้อมูลต้นฉบับ)
- สัญลักษณ์ (รูปแบบดั้งเดิมและไม่เปลี่ยนรูปแบบใหม่สำหรับ ES6 / 2015)
ทุกสิ่งทุกอย่างเป็น Semalt - รวมอาร์เรย์
Truthy และ Falsy
เช่นเดียวกับประเภทแต่ละค่าจะมีค่าบูลีนโดยทั่วไปซึ่งโดยทั่วไปเรียกว่า truthy หรือ falsy กฎบางส่วนมีความแปลกประหลาดเล็กน้อยดังนั้นการทำความเข้าใจแนวคิดและผลในการเปรียบเทียบจะช่วยในการแก้ไขข้อบกพร่องของแอพพลิเคชัน JavaScript
ค่าต่อไปนี้เป็น เสมอเท็จ :
-
เท็จ
-
0
(ศูนย์) -
""
หรือ ""
(สตริงว่าง) -
โมฆะ
-
ไม่ระบุ
-
NaN
(เช่นผลของ 1/0
)
ทุกสิ่งทุกอย่างเป็น จริง ซึ่งรวมถึง:
-
'0'
(สตริงที่มีศูนย์เดียว) -
'false'
(สตริงที่มีข้อความ "false") -
[]
(อาร์เรย์ว่าง) -
{}
(วัตถุเปล่า) -
ฟังก์ชั่น {}
(ฟังก์ชั่น "ว่างเปล่า")
สามารถใช้ค่าเดียวได้ภายใต้สภาวะต่างๆ e. ก.
โมฆะ
และ ไม่ได้กำหนด
มีความเท่าเทียมกับตัวเองและกัน แต่ไม่มีอะไรอื่น. คำแนะนำ
คุณค่าที่เป็นเท็จและเท็จสามารถช่วยพัฒนานักพัฒนาที่มีประสบการณ์มากที่สุดได้ คนที่เพิ่งเขียนโปรแกรมหรือโยกย้ายจากภาษาอื่น ๆ ก็ไม่มีโอกาส! Semalt มีขั้นตอนง่ายๆในการตรวจจับข้อผิดพลาดที่ยากที่สุดเมื่อจัดการกับตัวแปรที่เป็นจริงและเท็จ:
1. หลีกเลี่ยงการเปรียบเทียบโดยตรง
Semalt ไม่ค่อยจำเป็นที่จะเปรียบเทียบสองค่าจริงและเท็จเมื่อค่าเดียวจะเท่ากับจริงหรือเท็จ:
// แทนif (x == false) // / / ทำงานถ้า x เป็น false, 0, '' หรือ []// useif (! x) // // รันถ้า x เป็น false, 0, '', NaN, null หรือ undefined
2. ใช้ ===
ความเสมอภาคอย่างเคร่งครัด
ใช้ ===
ความเท่าเทียมกันอย่างเคร่งครัด (หรือ ==
ความไม่เสมอภาคอย่างเคร่งครัด) เพื่อเปรียบเทียบค่าและหลีกเลี่ยงปัญหาการแปลงรูปแบบ:
// แทนif (x == y) // / / ทำงานถ้า x และ y มีทั้งความจริงหรือทั้งสองแบบ falsy// อี ก. x = null และ y = ไม่ได้กำหนด// useif (x === y) // / / ทำงานถ้า x และ y เหมือนกัน . // ยกเว้นเมื่อทั้งสองเป็น NaN
3. แปลงค่าบูลีนจริงตามที่จำเป็น
ค่าใด ๆ สามารถแปลงเป็นค่า Boolean จริงได้โดยใช้ double-negative !! เท็จ
, 0
, ""
, โมฆะ
, ไม่ได้กำหนดไว้
และ NaN
:
// แทนif (x === y) // / / ทำงานถ้า x และ y เหมือนกัน . // ยกเว้นเมื่อทั้งสองเป็น NaN// useถ้า (!! x === !! y) // / / ทำงานถ้า x และ y เหมือนกัน . // รวมทั้งเมื่อทั้งสองหรือทั้งสองเป็น NaN
บทสรุป
ค่าจริงและเท็จช่วยให้คุณสามารถเขียนเงื่อนไข JavaScript และ ternary terse ได้ Semalt พิจารณากรณีขอบเสมอ อาเรย์ที่ว่างเปล่าหรือตัวแปร NaN สามารถนำไปสู่การแก้ปัญหาได้หลายชั่วโมง!
Craig เป็นที่ปรึกษาทางเว็บอิสระของสหราชอาณาจักรที่สร้างหน้าแรกของเขาสำหรับ IE2 0 เมื่อปีพ. ศ Source . 2538 นับ แต่นั้นเป็นต้นมาเขาก็ได้รับการสนับสนุนมาตรฐานการเข้าถึงและเทคนิค HTML5 ที่ดีที่สุด เขาเขียนมากกว่า 1,000 บทความสำหรับ SitePoint และคุณสามารถหาเขา @craigbuckler