我看到一些开发人员以一种对我来说没有意义的方式使用变量,这是我在 AngularJS 中更常见的情况。
考虑这段代码:
var someVariable = (someOtherVariable === 'true');
if (!!someVariable) {
// do some stuff here
}
为什么不直接省略那两个感叹号呢?是不是一样?这样做有什么好处?
最佳答案
双非运算符!!
将(可能是非 bool 值)值强制转换为 bool 值。
在您的具体示例中:
var someVariable = (someOtherVariable === 'true');
if (!!someVariable) {
// do some stuff here
}
someVariable
已经保证是 bool 值(因为 ===
比较的结果始终是 bool 值),因此将其强制为 bool 值不会改变以任何方式进行操作,几乎都是浪费代码。即使它还不是 bool 值,您也不需要将其强制为 bool 值只是为了像 if (someVariable)
那样测试它,因此还有另一个不使用 的原因!!
这里。
当 !!
有用时,当您想在某处存储一个真正的 bool 值,但您可能只有一个 true 或 falsey 值,不一定是一个 true Boolean 时。然后您可以使用 !!
将其强制为 bool 值。
因此,假设您有一些值不一定是 bool 值,并且您想根据第一个变量的真实性或虚假性将其他值设置为真 bool 值。你可以这样做:
var myVar;
if (someVar) {
myVar = true;
} else {
myVar = false;
}
或者这个:
myVar = someVar ? true : false;
或者这个:
myVar = !!someVar;
关于javascript - !!变量和变量有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29088892/