Jika saya mendeklarasikan variabel boolean JavaScript seperti ini:
var IsLoggedIn;
Dan kemudian menginisialisasi dengan salah satu true
atau 1
, apakah itu aman? Atau akan menginisialisasi dengan 1
membuat variabel menjadi angka?
javascript
boolean
mrblah
sumber
sumber
Jawaban:
Jenis bergantung pada inisialisasi Anda:
var IsLoggedIn1 = "true"; //string var IsLoggedIn2 = 1; //integer var IsLoggedIn3 = true; //bool
Tapi lihat contoh ini:
var IsLoggedIn1 = "true"; //string IsLoggedIn1 = true; //now your variable is a boolean
Jenis variabel Anda bergantung pada nilai yang ditetapkan di JavaScript.
sumber
Tidak, itu tidak aman. Anda nanti bisa melakukan var
IsLoggedIn = "Foo";
dan JavaScript tidak akan membuat kesalahan.Itu mungkin untuk dilakukan
var IsLoggedIn = new Boolean(false); var IsLoggedIn = new Boolean(true);
Anda juga dapat meneruskan variabel non boolean ke dalam
new Boolean()
dan itu akan membuat IsLoggedIn boolean.var IsLoggedIn = new Boolean(0); // false var IsLoggedIn = new Boolean(NaN); // false var IsLoggedIn = new Boolean("Foo"); // true var IsLoggedIn = new Boolean(1); // true
sumber
if (new Boolean(false)) alert ('wat')
Lihat stackoverflow.com/a/8695363(new Boolean(false)).toString()) === "false"
, terima kasih untuk tautannyaSeperti yang dikatakan tutorial yang sangat berguna ini :
var age = 0; // bad var hasAge = new Boolean(age); // good var hasAge = Boolean(age); // good var hasAge = !!age;
sumber
Jika Anda ingin
IsLoggedIn
diperlakukan sebagai boolean, Anda harus menginisialisasi sebagai berikut:var IsLoggedIn=true;
Jika Anda menginisialisasi dengan
var IsLoggedIn=1;
maka itu akan diperlakukan sebagai bilangan bulat.Namun, setiap saat variabel
IsLoggedIn
dapat merujuk ke tipe data yang berbeda:IsLoggedIn="Hello World";
Ini tidak akan menyebabkan kesalahan.
sumber
Anda dapat menggunakan dan menguji variabel yang tidak diinisialisasi setidaknya untuk 'ketetapannya'. Seperti ini:
var iAmNotDefined; alert(!iAmNotDefined); //true //or alert(!!iAmNotDefined); //false
Selain itu, ada banyak kemungkinan: jika Anda tidak tertarik dengan tipe yang tepat, gunakan operator '==' (atau! [Variabel] / !! [variabel]) untuk perbandingan (itulah yang disebut Douglas Crockford 'truthy' atau ' salah 'saya pikir). Dalam hal ini, menugaskan benar atau 1 atau '1' ke variabel unitial selalu mengembalikan nilai benar ketika ditanya. Sebaliknya [jika Anda membutuhkan jenis perbandingan yang aman] gunakan '===' untuk perbandingan.
var thisMayBeTrue; thisMayBeTrue = 1; alert(thisMayBeTrue == true); //=> true alert(!!thisMayBeTrue); //=> true alert(thisMayBeTrue === true); //=> false thisMayBeTrue = '1'; alert(thisMayBeTrue == true); //=> true alert(!!thisMayBeTrue); //=> true alert(thisMayBeTrue === true); //=> false // so, in this case, using == or !! '1' is implicitly // converted to 1 and 1 is implicitly converted to true) thisMayBeTrue = true; alert(thisMayBeTrue == true); //=> true alert(!!thisMayBeTrue); //=> true alert(thisMayBeTrue === true); //=> true thisMayBeTrue = 'true'; alert(thisMayBeTrue == true); //=> false alert(!!thisMayBeTrue); //=> true alert(thisMayBeTrue === true); //=> false // so, here's no implicit conversion of the string 'true' // it's also a demonstration of the fact that the // ! or !! operator tests the 'definedness' of a variable.
PS: Anda tidak dapat menguji 'ketetapan' untuk variabel yang tidak ada. Begitu:
memberikan referensi Kesalahan ('HelloWorld tidak ditentukan')
(apakah ada kata yang lebih baik untuk 'ketegasan'? Maafkan bahasa Belanda saya; ~)
sumber
thisMayBeTrue = '';
- Anda tidak akan mendapatkan hasil yang sama karena string kosong salah. "PS: Anda tidak bisa test 'definedness' untuk nonexisting variabel meskipun" - Tentu Anda dapat:typeof HellowWorld === 'undefined'
.Variabel dalam Javascript tidak memiliki tipe. Bukan nol, bukan nol, tidak kosong dan
true
"benar". Nol, nol, tidak ditentukan, string kosong danfalse
"salah".Ada tipe Boolean, seperti literal
true
danfalse
.sumber
2 + 2
vs"2" + 2
. Lihat jugatypeof
operatornya .Bagaimana dengan sesuatu yang seperti ini:
var MyNamespace = { convertToBoolean: function (value) { //VALIDATE INPUT if (typeof value === 'undefined' || value === null) return false; //DETERMINE BOOLEAN VALUE FROM STRING if (typeof value === 'string') { switch (value.toLowerCase()) { case 'true': case 'yes': case '1': return true; case 'false': case 'no': case '0': return false; } } //RETURN DEFAULT HANDLER return Boolean(value); } };
Kemudian Anda bisa menggunakannya seperti ini:
MyNamespace.convertToBoolean('true') //true MyNamespace.convertToBoolean('no') //false MyNamespace.convertToBoolean('1') //true MyNamespace.convertToBoolean(0) //false
Saya belum mengujinya untuk kinerja, tetapi mengonversi dari tipe ke tipe tidak boleh terjadi terlalu sering jika tidak Anda membuka aplikasi Anda hingga tidak stabil dalam waktu besar!
sumber
Variabel akan menjadi tipe apa pun yang Anda tetapkan. Awalnya memang begitu
undefined
. Jika Anda menetapkannya'true'
akan menjadi string, jika Anda menetapkannyatrue
akan menjadi boolean, jika Anda menetapkannya1
akan menjadi angka. Penugasan selanjutnya mungkin mengubah jenis variabel nanti.sumber