Ubah truthy atau falsy menjadi boolean eksplisit

100

Saya memiliki variabel. Sebut saja toto.

Ini totodapat diatur ke undefined,, nullstring, atau objek.

Saya ingin memeriksa apakah totodisetel ke data, yang berarti disetel ke string atau objek, dan bukan undefinedjuga null, dan menyetel nilai boolean yang sesuai di variabel lain.

Saya memikirkan sintaksnya !!, yang akan terlihat seperti ini:

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

Yang pertama !akan disetel ke falseif toto is undefinedor nulland trueelse, dan yang kedua akan membalikkannya.

Tapi ini terlihat agak aneh. Jadi, apakah ada cara yang lebih jelas untuk melakukan ini?

Saya sudah melihat pertanyaan ini , tetapi saya ingin menetapkan nilai dalam variabel, tidak hanya memeriksanya dalam ifpernyataan.

Aracthor
sumber
10
Pertanyaan ini ditandai sebagai duplikat tetapi jika Anda melihat pertanyaan lain stackoverflow.com/questions/263965/… pertanyaan ini sangat berbeda; mereka bukan duplikat sama sekali
Sam
@Sam Maaf, tapi saya mengkonfirmasi diri saya duplikat ini, saya tidak tahu tentang pertanyaan lain ini, tapi Itu menyelesaikan masalah saya.
Aracthor
11
@Aracthor Ini BUKAN duplikat, karena stackoverflow.com/questions/263965/… adalah tentang mengubah string yang hanya berisi kata-kata "true" dan "false" ke Boolean rekan-rekan mereka. Pertanyaan ini tentang mengubah variabel APA PUN menjadi Boolean berdasarkan apakah itu benar atau salah.
Alan McBee - MSFT

Jawaban:

158

Ya, Anda selalu dapat menggunakan ini:

var tata = Boolean(toto);

Dan berikut beberapa tesnya:

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

Hasil:

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
Robo Robok
sumber
75
Catatan, Boolean ("false") adalah benar, jika Anda mungkin menginginkannya salah.
Sterling Bourne
45
Mengapa Anda ingin string "false" menjadi falsy? Bahkan php tidak melakukan itu: D
Danon
1
Maksudnya Boolean("false").
Robo Robok
2
@Noah Ini mengembalikan true. Satu-satunya string yang di-cast falseadalah string kosong ( "").
Robo Robok
6
Persis. Itulah mengapa Anda harus berhati-hati saat menggunakan frase "false" jika berada dalam tanda kutip dan dengan demikian diartikan sebagai String. Anda mungkin berpikir Anda mentransmisikannya ke false, tetapi pada kenyataannya itu akan mengembalikan true - karena itu peringatan asli.
Sterling Bourne
1

Anda dapat menggunakan Boolean(obj)atau !!objuntuk mengonversi truthy/falsyke true/false.

var obj = {a: 1}
var to_bool_way1 = Boolean(obj) // true
var to_bool_way2 = !!obj // true
yaya
sumber