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?
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?
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.
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
if (new Boolean(false)) alert ('wat')
Lihat stackoverflow.com/a/8695363
(new Boolean(false)).toString()) === "false"
, terima kasih untuk tautannya
Seperti 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;
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.
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:
alert(!!HelloWorld);
memberikan referensi Kesalahan ('HelloWorld tidak ditentukan')
(apakah ada kata yang lebih baik untuk 'ketegasan'? Maafkan bahasa Belanda saya; ~)
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 dan false
"salah".
Ada tipe Boolean, seperti literal true
dan false
.
2 + 2
vs "2" + 2
. Lihat juga typeof
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!
Variabel akan menjadi tipe apa pun yang Anda tetapkan. Awalnya memang begitu undefined
. Jika Anda menetapkannya 'true'
akan menjadi string, jika Anda menetapkannya true
akan menjadi boolean, jika Anda menetapkannya 1
akan menjadi angka. Penugasan selanjutnya mungkin mengubah jenis variabel nanti.