แปลงความจริงหรือเท็จเป็นบูลีนที่ชัดเจน


101

ฉันมีตัวแปร ขอเรียกว่าtoto.

ซึ่งtotoสามารถตั้งค่าเป็นundefined , nullสตริงหรือวัตถุ

ฉันต้องการตรวจสอบว่าtotoถูกตั้งค่าเป็นข้อมูลหรือไม่ซึ่งหมายถึงตั้งค่าเป็นสตริงหรือวัตถุและไม่undefinedมิได้nullและชุดที่สอดคล้องกันค่าบูลีนในตัวแปรอื่น

ฉันนึกถึงไวยากรณ์!!ซึ่งจะมีลักษณะดังนี้:

var tata = !!toto; // tata would be set to true or false, whatever toto is.

ครั้งแรก!จะถูกตั้งค่าเป็นfalseif toto undefinedหรือnullและtrueอื่น ๆ และอันที่สองจะกลับ

แต่มันดูแปลกไปหน่อย มีวิธีที่ชัดเจนกว่านี้หรือไม่?

ฉันได้ดูคำถามนี้แล้ว แต่ฉันต้องการตั้งค่าในตัวแปรไม่ใช่แค่ตรวจสอบในifคำสั่ง


10
คำถามนี้ถูกทำเครื่องหมายว่าซ้ำกัน แต่ถ้าคุณดูคำถามอื่น stackoverflow.com/questions/263965/…มันค่อนข้างแตกต่างกัน พวกเขาไม่ซ้ำกันเลย
แซม

@ แซมขอโทษ แต่ฉันยืนยันว่าตัวเองซ้ำฉันไม่รู้เกี่ยวกับคำถามอื่นนี้ แต่มันช่วยแก้ปัญหาของฉันได้
Aracthor

11
@Aracthor มันไม่ซ้ำกันเพราะstackoverflow.com/questions/263965/…เป็นเรื่องเกี่ยวกับการแปลงสตริงที่มีเฉพาะคำว่า "true" และ "false" ให้เป็นคู่บูลีน คำถามนี้เกี่ยวกับการแปลงตัวแปรใด ๆ เป็นบูลีนโดยพิจารณาจากว่าเป็นจริงหรือเท็จ
Alan McBee - MSFT

คำตอบ:


159

ใช่คุณสามารถใช้สิ่งนี้ได้ตลอดเวลา:

var tata = Boolean(toto);

และนี่คือการทดสอบบางส่วน:

for (var value of [0, 1, -1, "0", "1", "cat", true, false, undefined, null]) {
    console.log(`Boolean(${typeof value} ${value}) is ${Boolean(value)}`);
}

ผล:

Boolean(number 0) is false
Boolean(number 1) is true
Boolean(number -1) is true
Boolean(string 0) is true
Boolean(string 1) is true
Boolean(string cat) is true
Boolean(boolean true) is true
Boolean(boolean false) is false
Boolean(undefined undefined) is false
Boolean(object null) is false

75
หมายเหตุบูลีน ("เท็จ") เป็นจริงเมื่อคุณอาจต้องการให้เป็นเท็จ
Sterling Bourne

45
ทำไมบนโลกนี้คุณต้องการให้สตริง "เท็จ" เป็นเท็จ? แม้แต่ php ก็ยังทำไม่ได้: D
Danon

1
เขาหมายถึงBoolean("false").
Robo Robok

2
@NoahDavid มันส่งคืนจริง สตริงเดียวที่แคสต์falseเป็นสตริงว่าง ( "")
Robo Robok

6
ตรง นี่คือเหตุผลที่คุณต้องระมัดระวังในการใช้วลี "false" หากอยู่ในเครื่องหมายอัญประกาศจึงตีความเป็น String คุณอาจคิดว่าคุณกำลังแคสต์เป็นเท็จ แต่ในความเป็นจริงแล้วมันจะกลับมาเป็นจริงดังนั้นคำเตือนเดิม
Sterling Bourne

2

คุณสามารถใช้Boolean(obj)หรือ!!objสำหรับการแปลงไปtruthy/falsytrue/false

var obj = {a: 1}
var to_bool_way1 = Boolean(obj) // true
var to_bool_way2 = !!obj // true
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.