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

为什么JavaScript的||运算符在Express分页设置默认页码时不生效?

原因分析

  • 第一点:Express路由参数的默认类型是字符串
    你从req.params.page拿到的所有值默认都是字符串类型,比如请求路径传入0时,实际拿到的是'0'而非数字0。在JS规则里,非空字符串属于真值,因此'0' || 1的运算结果是'0',不会触发你想要的默认值1。
  • 第二点:||逻辑或运算符的判断逻辑不符合你的需求
    就算你提前把req.params.page转成了数字类型,||仅会在左侧值为JS假值(0、''、null、undefined、NaN、false)时才返回右侧的默认值。如果用户传入小于0的负数(比如-1、-2),负数属于真值,-1 || 1的运算结果就是-1,完全不满足你要求的<=0就设为1的规则。

而你之前写的三元运算符req.params.page <= 0 ? 1: req.params.page之所以能生效,是因为做<=0比较时,JS会自动把字符串类型的参数转成数字进行判断,只要结果小于等于0就会返回1,刚好匹配你的需求。

正确的兼容写法

如果想要更简洁的写法,可以先把参数转成数字,再做范围限制:

// 先转数字,再用Math.max保证最小为1,同时兼容参数为空/非数字的场景
let page = Math.max(Number(req.params.page) || 1, 1);

内容的提问来源于stack exchange,提问作者Cao Minh Trí

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:36:04