javascript - !!变量和变量有什​​么区别

标签 javascript angularjs

我看到一些开发人员以一种对我来说没有意义的方式使用变量,这是我在 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/

相关文章:

javascript - Node.js - setTimeout 回调的触发顺序是否与注册的顺序相同?

javascript - 如何在 json 范围内进行 eval ?

javascript - 对父 div 的 Angular 单击不会触发所有子 div

javascript - 如何转到 Epubjs 中的特定页面

javascript - angularFire 无法将数据添加到 firebase

javascript - 无法读取 null 的属性 ____

javascript - 向 laravel 5 应用程序提交表单请求时如何从 html 页面获取和发送 _token

javascript - AngularJS 条件 ng-disabled 不重新启用

angularjs - angular.js,无法编辑动态创建的输入字段

javascript - 如何检查 ng-repeat 生成的第一个 radio 输入?