mrb*_*lah 88 javascript boolean
如果我声明一个像这样的JavaScript布尔变量:
var IsLoggedIn;
Run Code Online (Sandbox Code Playgroud)
然后用或者初始化true或者1,是安全的呢?或者将1变量初始化为变量?
Can*_*var 160
类型取决于您的初始化:
var IsLoggedIn1 = "true"; //string
var IsLoggedIn2 = 1; //integer
var IsLoggedIn3 = true; //bool
Run Code Online (Sandbox Code Playgroud)
但是看看这个例子:
var IsLoggedIn1 = "true"; //string
IsLoggedIn1 = true; //now your variable is a boolean
Run Code Online (Sandbox Code Playgroud)
变量的类型取决于JavaScript中的赋值.
Óla*_*age 19
不,这不安全.您以后可以执行var IsLoggedIn = "Foo";,JavaScript不会抛出错误.
有可能做到
var IsLoggedIn = new Boolean(false);
var IsLoggedIn = new Boolean(true);
Run Code Online (Sandbox Code Playgroud)
您也可以将非布尔变量传递给new Boolean()它,它将使IsLoggedIn布尔值.
var IsLoggedIn = new Boolean(0); // false
var IsLoggedIn = new Boolean(NaN); // false
var IsLoggedIn = new Boolean("Foo"); // true
var IsLoggedIn = new Boolean(1); // true
Run Code Online (Sandbox Code Playgroud)
小智 10
正如这个非常有用的教程所说:
var age = 0;
// bad
var hasAge = new Boolean(age);
// good
var hasAge = Boolean(age);
// good
var hasAge = !!age;
Run Code Online (Sandbox Code Playgroud)
如果要将IsLoggedIn其视为布尔值,则应按如下方式初始化:
var IsLoggedIn=true;
Run Code Online (Sandbox Code Playgroud)
如果用var IsLoggedIn=1;它初始化它将被视为整数.
但是,在任何时候变量IsLoggedIn都可以引用不同的数据类型:
IsLoggedIn="Hello World";
Run Code Online (Sandbox Code Playgroud)
这不会导致错误.
您可以至少为其"定义"使用和测试未初始化的变量.像这样:
var iAmNotDefined;
alert(!iAmNotDefined); //true
//or
alert(!!iAmNotDefined); //false
Run Code Online (Sandbox Code Playgroud)
此外,还有许多可能性:如果你对确切的类型不感兴趣,可以使用'=='运算符(或![variable]/!! [variable])进行比较(这就是Douglas Crockford所说的'truthy'或'我认为是错误的.在这种情况下,为单位化变量赋值true或1或'1'在被询问时始终返回true.否则[如果您需要类型安全比较]使用'==='进行比较.
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.
Run Code Online (Sandbox Code Playgroud)
PS:你不能测试不存在的变量的'定义'.所以:
alert(!!HelloWorld);
Run Code Online (Sandbox Code Playgroud)
给出引用错误('HelloWorld未定义')
(对于'定义'有没有更好的词?不管怎样,请原谅我的荷兰人;〜)