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

如何在JavaScript中模拟PHP的??双问号运算符行为?

解决方案:结合可选链与空合并操作符

当然有!你需要把**可选链操作符(?.)和空合并操作符(??)**搭配使用,就能实现和PHP中完全一致的静默返回默认值的效果。

为什么你的原JS代码会报错?

在你的示例里,user.information是不存在的,所以它的值是undefined。直接访问undefined.company会触发TypeError——因为undefined不是对象,没法读取它的属性。而??操作符只能处理null或undefined本身,它没法帮你跳过属性链中不存在的节点。

正确的写法

var user = JSON.parse(' { "info" : { "company" : "apple" } } ');
console.log(user.information?.company ?? 'N/A'); // 输出 'N/A',无报错

原理说明

  • 可选链?.:它会在访问下一个属性前,先检查当前对象是否为null或undefined。如果是,就直接返回undefined,而不是抛出错误。比如user.information?.company中,因为user.information不存在,所以整个表达式直接返回undefined。
  • 空合并??:当左边的表达式结果为null或undefined时,就返回右边的默认值。这里刚好接住?.返回的undefined,输出'N/A'。

额外补充

如果你需要处理更多假值(比如空字符串""、数字0等),可以用||替代??,但要注意||会把所有假值都当成“需要 fallback”的情况,这和PHP的??逻辑不完全一致。在你的场景里,??是更贴合需求的选择。

内容的提问来源于stack exchange,提问作者ohho

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:55:28