You need to enable JavaScript to run this app. Dart中如何简写NaN判断代码?有没有类似JS||运算符的替代方案?
优惠活动
大模型
产品
解决方案
定价
更多

Dart中如何简写NaN判断代码?有没有类似JS||运算符的替代方案?

Dart 处理NaN fallback的简洁写法

Dart 本身的||仅支持布尔运算,无法像JS一样直接对数值做NaN fallback,但是可以通过以下几种方式实现更简洁的写法,同时还能避免你原有代码两次执行除法的冗余问题:

  • 方法1:临时变量存储计算结果(无额外依赖,最通用)
final ratio = data['amount'] / totalSpending;
final res = ratio.isNaN ? 0.0 : ratio;
  • 方法2:封装扩展方法(一次封装,全项目复用,写法最接近JS)
    先定义通用的数值NaN处理扩展:
extension NumNaNUtil on num {
  /// 当数值为NaN时返回0.0,否则返回自身
  num get nanToZero => isNaN ? 0.0 : this;
}

使用时直接一行调用即可:

(data['amount'] / totalSpending).nanToZero
  • 方法3:借助通用let扩展实现单行无重复计算
    如果你的项目已经有通用的Object扩展方法,也可以直接用let实现单行处理:
extension ObjectExt<T> on T {
  R let<R>(R Function(T it) op) => op(this);
}

// 业务代码调用
(data['amount'] / totalSpending).let((val) => val.isNaN ? 0.0 : val);

注意:Dart 中NaN属于合法的num类型值,不是null,因此无法用??运算符直接做fallback处理。

内容的提问来源于stack exchange,提问作者マスターヨーダー

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 04:36:00