You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:59:00