วิธีการสลับบูล


412

มีวิธีง่าย ๆ ในการสลับค่าบูลีนในjavascriptหรือไม่?

จนถึงตอนนี้สิ่งที่ดีที่สุดที่ฉันมีนอกเหนือจากการเขียนฟังก์ชันแบบกำหนดเองคือ ternary:

bool = bool ? false : true;

คำตอบ:


926
bool = !bool;

สิ่งนี้ถือเป็นจริงในเกือบทุกภาษา


8
ทางออกที่ดีจริงๆฉันใช้: test = (test == จริง)? ผิดถูก;
alpera

1
ต้องมีการเริ่มต้นจึงมีวิธีที่ไม่มีการเริ่มต้น แม้ว่าสิ่งนี้จะทำงานกับคุณลักษณะของวัตถุ
2846569

10
@ user2846569 หากคุณสลับบูลีนนั่นหมายความว่าโดยปกติแล้วตัวแปรได้รับการเริ่มต้นแล้ว คุณสามารถขยายเพื่อbool = !bool || true;ให้เป็นค่าเริ่มต้นฉันคิดว่า
Jordan

3
@Jordan ที่ทำให้ ReferenceError
2846569

1
JB ต้องการคำสั่ง unary มากกว่าคำสั่ง binary บางทีมันอาจเป็นเรื่องน่าเบื่อ !! หรือ !! บูล แต่จนถึงตอนนี้ฉันไม่เคยเห็นไวยากรณ์ดังกล่าวมาก่อน ฉันเห็นด้วยกับจอร์แดน มันสั้นมากแล้ว
Fandi Susanto

95

หากคุณไม่ทราบความเป็นอยู่แบบบูลแปลงเป็นตัวเลข (นั่นคือ 0 หรือ 1) คุณสามารถใช้การกำหนดผู้ประกอบการ Bitwise แฮคเกอร์ ชอบมาก

bool ^= true;   //- toggle value.


นี่เป็นสิ่งที่ดีโดยเฉพาะถ้าคุณใช้ชื่อบูลีนที่มีความหมายยาว ๆ EG:

var inDynamicEditMode   = true;     // Value is: true (boolean)
inDynamicEditMode      ^= true;     // Value is: 0 (number)
inDynamicEditMode      ^= true;     // Value is: 1 (number)
inDynamicEditMode      ^= true;     // Value is: 0 (number)

การสแกนแบบนี้ง่ายกว่าการทำซ้ำตัวแปรในแต่ละบรรทัด

วิธีนี้ใช้ได้กับเบราว์เซอร์ (หลัก) ทั้งหมด (และภาษาการเขียนโปรแกรมส่วนใหญ่)


15
ตั้งแต่นี้ recasts เป็นจำนวนเต็มอยู่แล้วมันสามารถง่ายเป็น:bool ^= 1
Kyle Mueller

47
เป็นค่าที่จะหล่อไปยังหมายเลขที่คุณจะไม่สามารถที่จะทำbool === falseหรือbool === trueอีกต่อไป มันอาจทำลายรหัสที่มีอยู่ดังนั้นโปรดระวัง
aymericbeaumet


8

ลองดูสิ่งนี้ในทางปฏิบัติ:

var b = true;

console.log(b); // true

b = !b;
console.log(b); // false

b = !b;
console.log(b); // true

อย่างไรก็ตามไม่มีวิธีที่สั้นกว่าสิ่งที่คุณมีอยู่ในปัจจุบัน


2
bool === tool ? bool : tool

ถ้าคุณต้องการให้ค่าถือจริงถ้าtool(บูลีนอื่น) มีค่าเดียวกัน


2

ฉันถูกค้นหาหลังจากวิธีการสลับที่ไม่เหมือนกันยกเว้นค่า inital ของnullหรือที่ที่มันควรจะเป็นundefinedfalse

นี่มันคือ:

booly = !(booly != false)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.