如何在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
相关产品推荐
相关产品推荐

