Bunun gibi bir JavaScript boole değişkeni bildirirsem:
var IsLoggedIn;
Ve sonra true
veya ile başlat 1
, bu güvenli mi? Yoksa onu 1
değişkeni bir sayı ile başlatmak mı?
Yanıtlar:
Türler, başlatmanıza bağlıdır:
var IsLoggedIn1 = "true"; //string
var IsLoggedIn2 = 1; //integer
var IsLoggedIn3 = true; //bool
Ancak şu örneğe bir bakın:
var IsLoggedIn1 = "true"; //string
IsLoggedIn1 = true; //now your variable is a boolean
Değişkenlerinizin türü, JavaScript'te atanan değere bağlıdır.
Hayır güvenli değil. Daha sonra var yapabilirsiniz IsLoggedIn = "Foo";
ve JavaScript hata vermez.
Yapmak mümkün
var IsLoggedIn = new Boolean(false);
var IsLoggedIn = new Boolean(true);
Ayrıca boole olmayan değişkeni 'a aktarabilirsiniz new Boolean()
ve bu IsLoggedIn'i boolean yapar.
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')
See stackoverflow.com/a/8695363
(new Boolean(false)).toString()) === "false"
bağlantı için teşekkürler
Bu çok kullanışlı öğreticinin dediği gibi:
var age = 0;
// bad
var hasAge = new Boolean(age);
// good
var hasAge = Boolean(age);
// good
var hasAge = !!age;
Eğer istersen IsLoggedIn
aşağıdaki gibi başlatmak gerektiğini boolean olarak tedavi edilmesi:
var IsLoggedIn=true;
İle başlatırsanız var IsLoggedIn=1;
o zaman bir tamsayı olarak değerlendirilecektir.
Ancak değişken herhangi bir zamanda IsLoggedIn
farklı bir veri türüne başvurabilir:
IsLoggedIn="Hello World";
Bu bir hataya neden olmaz.
Sen edebilirsiniz kullanmak ve test kendi 'tanımlanabilirlik' için en az değişkenleri başlatılmamış. Bunun gibi:
var iAmNotDefined;
alert(!iAmNotDefined); //true
//or
alert(!!iAmNotDefined); //false
Dahası, pek çok olasılık vardır: tam türlerle ilgilenmiyorsanız, karşılaştırma için '==' operatörünü (veya! [Değişken] / !! [değişken]) kullanın (Douglas Crockford'un "doğru" veya " sahte 'sanırım). Bu durumda, birimselleştirilmiş değişkene true veya 1 veya '1' atanması, sorulduğunda her zaman doğru döndürür. Aksi takdirde [güvenli karşılaştırmaya ihtiyacınız varsa] karşılaştırma için '===' kullanın.
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.
Not: Var olmayan değişkenler için 'tanımlılığı' test edemezsiniz. Yani:
alert(!!HelloWorld);
bir referans hatası verir ('HelloWorld tanımlı değil')
('tanımlılık' için daha iyi bir kelime var mı? Yine de Hollandacamı affedin; ~)
thisMayBeTrue = '';
- boş bir dize yanlış olduğu için aynı sonuçları alamazsınız. "Not: Eğer test edemeyeceğiniz olsa değişkenleri varolmayan için 'tanımlanabilirlik'" - Elbette yapabilirsin: typeof HellowWorld === 'undefined'
.
Javascript'teki değişkenlerin bir türü yoktur. Sıfır olmayan, boş olmayan, boş olmayan ve true
"doğru". Sıfır, boş, tanımsız, boş dizge ve false
"yanlış" dır.
Gerçi, değişmez değerler gibi bir Boolean türü vardır true
ve false
.
2 + 2
vs gibi basit bir örnekle gösterilebileceği gibi önemlidir "2" + 2
. Ayrıca typeof
operatöre bakın .
Bunun gibi bir şeye ne dersiniz:
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);
}
};
O zaman bunu şu şekilde kullanabilirsiniz:
MyNamespace.convertToBoolean('true') //true
MyNamespace.convertToBoolean('no') //false
MyNamespace.convertToBoolean('1') //true
MyNamespace.convertToBoolean(0) //false
Bunu performans açısından test etmedim, ancak türden türe dönüştürme çok sık olmamalı, aksi takdirde uygulamanızı kararsızlığa büyük zaman açarsınız!
Değişken, ne tür atarsanız atayın. Başlangıçta öyle undefined
. Eğer atarsanız 'true'
bir dizge, atarsanız true
boole, atarsanız 1
sayı olur. Sonraki atamalar daha sonra değişkenin türünü değiştirebilir.