!!变量和变量之间有什么区别

时间:2015-03-16 23:42:12

标签: javascript angularjs

我见过一些开发人员以对我没有意义的方式使用变量,这是我在AngularJS中更常见的。

考虑以下代码:

var someVariable = (someOtherVariable === 'true');
if (!!someVariable) {
     // do some stuff here
}

为什么不留下那两个感叹号呢?是不一样的?这样做有什么好处?

2 个答案:

答案 0 :(得分:2)

double not运算符!!将一个(可能是非布尔值)强制转换为布尔值。

在您的具体示例中:

var someVariable = (someOtherVariable === 'true');
if (!!someVariable) {
     // do some stuff here
}

someVariable已经保证是一个布尔值(因为===比较的结果总是一个布尔值)所以将它强制转换为布尔值不会以任何方式改变操作并且几乎是浪费的代码。即使它不是布尔值,你也不需要将它强制转换为布尔值,只是为了像if (someVariable)那样测试它,所以还有另一个原因就是不在这里使用!!

!!有用时,你想在某个地方存储一个真正的布尔值,但你可能只有一个真值或假值,不一定是真正的布尔值。然后,您可以使用!!将其强制转换为布尔值。


因此,假设您有一些不一定是布尔值的值,并且您希望根据第一个变量的真实性或假性来将其他值设置为真正的布尔值。你可以这样做:

var myVar;
if (someVar) {
    myVar = true;
} else {
    myVar = false;
}

或者这个:

myVar = someVar ? true : false; 

或者这个:

myVar = !!someVar;

答案 1 :(得分:1)

!!是双重运算符。它强制操作数为Boolean

就条件语句而言,if (!!someVariable) { }相当于if (someVariable) { },因为如果值为真,则会满足条件,因为存在自动布尔强制。