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

Liquid中是否支持类似JavaScript的链式||(或)表达式语法?

在Liquid中实现JS式的短路优先取值逻辑

当然有啦!Liquid 里完全能用单行代码搞定你要的这种「优先取name,没有就降级到nickname,最后用'-'兜底」的逻辑,根本不用写一堆繁琐的if/elseif语句,下面给你两种常用的简洁写法:

方法1:链式调用 default 过滤器

Liquid 的 default 过滤器就是专门用来处理“值为空/不存在时用默认值”的场景,咱们把它链式起来就能实现多级降级:

{{ person.name | default: person.nickname | default: '-' }}

它的运行逻辑很清晰:

  • 先看 person.name,只要它不是 nil 或者 false,就直接用这个值;
  • 如果 person.name 是 nil/false,就转而使用 person.nickname;
  • 要是 person.nickname 也不符合要求,最后就用 - 兜底。

小补充:如果你的场景里空字符串也需要被替换,可以给 default 加第二个参数 true,比如 {{ person.name | default: person.nickname, true | default: '-', true }},这样空字符串也会触发降级逻辑。

方法2:使用 or 逻辑运算符

Liquid 也支持 or 运算符,和 JavaScript 里的 || 行为非常类似,同样能实现单行的短路求值:

{{ person.name or person.nickname or '-' }}

这个写法的逻辑是从左到右找第一个「真值」:

  • 只要 person.name 是真值(不是 nil、false、空字符串、空数组这类假值),就直接返回它;
  • 如果 person.name 是假值,就看 person.nickname;
  • 要是前面两个都是假值,最后就返回 -。

两种写法的细微差异

  • 如果你的业务里空字符串是合法值需要保留,那用不带第二个参数的 default 过滤器更合适——它不会替换空字符串;
  • 如果空字符串也需要被降级替换,那 or 运算符会更直接,因为它把空字符串判定为假值,会自动往后找下一个值。

内容的提问来源于stack exchange,提问作者V. Rubinetti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:37:47