Sass相等运算符行为不一致,此情况是否属于Bug?
Is this an inconsistency bug with equality operators in Sass?
这绝对不是Sass的bug——问题出在你写的逻辑判断上,咱们来理清楚到底哪里错了:
首先看你第一个符合预期的函数:
@function mathOperation($number, $type) { @if $type == sum or $type == rest { @return true } @else { @return false } }
这个逻辑很清晰:当$type是sum或者rest时返回true,其他情况返回false,完全符合逻辑,所以输出结果和你预期一致。
但第二个函数的逻辑就有问题了:
@function mathOperation2($number, $type) { @if $type != sum or $type != rest { @return true } @else { @return false } }
你这里用了!=加or,咱们逐个测试参数就会发现问题:
- 当传
sum时:$type != rest是成立的,所以整个or条件为true,返回true - 当传
rest时:$type != sum是成立的,整个or条件也为true,返回true - 当传
division时:两个!=条件都成立,自然返回true
说白了,这个逻辑不管传什么参数都会返回true,因为一个值不可能同时等于sum和rest,所以or连接的两个!=条件永远至少有一个成立。
如果你想实现“当$type既不是sum也不是rest时返回true”,应该把or换成and:
@function mathOperation2($number, $type) { @if $type != sum and $type != rest { @return true } @else { @return false } }
或者用not来包裹第一个函数的判断逻辑,效果是一样的:
@function mathOperation2($number, $type) { @if not ($type == sum or $type == rest) { @return true } @else { @return false } }
这样修改后,sum和rest会返回false,division返回true,就和你预期的一致了。
内容的提问来源于stack exchange,提问作者aalvarado
相关产品推荐
相关产品推荐

