ฉันมักจะเห็นตัวอย่างเช่นนี้:
การคัดลอกรหัสมีดังนี้:
var a;
var b = !! a;
A ไม่ได้กำหนดโดยค่าเริ่มต้น ! A เป็นความจริง !! a เป็นเท็จดังนั้นค่าของ b เป็นเท็จไม่ได้ไม่ได้กำหนดหรือค่าอื่น ๆ อีกต่อไปซึ่งส่วนใหญ่ให้ความสะดวกสำหรับการตัดสินที่ตามมา
!! โดยทั่วไปแล้วจะใช้ในการแสดงข้อมูลต่อไปนี้ลงในข้อมูลบูลีน (บูลีน) นั่นคือมันสามารถเป็นจริงหรือเท็จเท่านั้น
เนื่องจาก JavaScript เป็นภาษาประเภทที่อ่อนแอ (ตัวแปรไม่มีชนิดข้อมูลคงที่) บางครั้งจำเป็นต้องถูกส่งไปยังประเภทที่เกี่ยวข้องเช่น:
การคัดลอกรหัสมีดังนี้:
A = ParseInt ("1234")
A =” 1234″ -0 // แปลงเป็นหมายเลข
b = 1234+” // แปลงเป็นสตริง
c = someObject.toString () // แปลงวัตถุเป็นสตริง
ในหมู่พวกเขาการแปลงที่ชัดเจนและสี่คือการแปลงที่ชัดเจนและ 2 และ 3 เป็นการแปลงโดยนัย
การแปลงบูลีนกฎการประชุม JavaScript คือ
เท็จ, ไม่ได้กำหนด, null, 0, "" เป็นเท็จ
จริง, 1, "somestring", [วัตถุ] เป็นจริง
สำหรับค่าที่แปลงโดยปริยายอื่น ๆ เช่น null และ undefined ตัวดำเนินการ!
ลองมาดูกันอีกครั้ง:
การคัดลอกรหัสมีดังนี้:
var foo;
การแจ้งเตือน (! foo); // ในกรณีที่ไม่ได้รับการยกเว้นเครื่องหมายอัศเจรีย์ส่งคืนจริง;
การแจ้งเตือน (! goo); // ในกรณีของ Null การกลับมาของเครื่องหมายอัศเจรีย์ก็เป็นจริงเช่นกัน
var o = {Flag: true};
test var = !! o.flag; // เทียบเท่ากับ var test = o.flag || false;
การแจ้งเตือน (ทดสอบ);
ตัวอย่างนี้แสดงให้เห็นว่าเมื่อไม่ได้รับการบอกกล่าวและเป็นโมฆะการกลับมาของเครื่องหมายอัศเจรีย์หนึ่งจุดนั้นเป็นจริงและการกลับมาของสองจุดอัศเจรีย์เป็นเท็จดังนั้นฟังก์ชั่นของสองจุดอัศเจรีย์คือถ้าค่าของตัวแปรถูกตั้งค่าอย่างชัดเจน (ไม่ใช่ไม่ใช่ null/undifined/0/"และ" ค่าที่เทียบเท่า) ผลลัพธ์จะถูกส่งคืนตามค่าจริงของตัวแปร