有没有一种简单的方法可以在true和false之间切换javascript变量?
我有这个:有没有一种简单的方法可以在true和false之间切换javascript变量?,javascript,Javascript,我有这个: modalTogglePreview: function ($scope) { if ($scope.modal.wmdPreview === true) { $scope.modal.wmdPreview = false; } else { $scope.modal.wmdPreview = true; } } 有没有什么方法可以实现同样的效果,但不使用if语句 $sc
modalTogglePreview: function ($scope) {
if ($scope.modal.wmdPreview === true) {
$scope.modal.wmdPreview = false;
} else {
$scope.modal.wmdPreview = true;
}
}
有没有什么方法可以实现同样的效果,但不使用if语句
$scope.modal.wmdPreview = !$scope.modal.wmdPreview;
一元
运算符将其参数解释为布尔值,并返回布尔补码。请注意,这实际上与您的代码并不完全相同:您的代码只有在测试时变量完全为true
时才有效。根据我的经验(不管怎样),依赖JavaScript中用作标志的变量作为真正的布尔值有点脆弱。(不过,也有相反的论点,所以这取决于你。)
为了进一步解释,请参见
运算符将值未定义
,空
,0
,NaN
,false
,以及空字符串解释为false
。任何其他值都是true
除了使用前面提到的Pointy运算符(这应该是首选方法)之外,如果您发现自己在if…else
语句中设置了布尔值,那么您可能做错了什么。
条件已计算为布尔值。因此,您的if…else
语句相当于
$scope.modal.wmdPreview = $scope.modal.wmdPreview !== true;
请看以下示例:
var result;
if (cond) {
result = true;
}
else {
result = false;
}
这意味着,如果条件(cond
)为真,则将result
设置为true
。如果cond
为false,则将结果设置为false
。我们分配给result
的值正好是cond
的值。因此,上述内容相当于写作
var result = cond;
现在,有时我们使用的条件的计算结果不是布尔值。要将任何值转换为其等效布尔值,可以应用not运算符两次:
另一方面类似:
var result;
if (cond) {
result = false;
}
else {
result = true;
}
如果cond
为true,则将false
分配给结果
。如果cond
为false,则将true
分配给result
。这和你的情况一样。我们分配给result
的值与cond
的值相反。如Pointy所示,我们可以使用not运算符:
var result = !cond;
这适用于任何情况,但取决于表达式,它可能会使其更难阅读。例如,!(x>5)
不如x明显
var result = !cond;