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

JavaScript中检测undefined变量后如何显示替代值?

解决geo.js返回城市信息为undefined的判断问题

你之前用json.city != 'undefined'判断无效的核心原因是:undefined是JavaScript的原始数据类型,并非字符串"undefined",直接和字符串比较自然不成立。

正确的检测方式

以下几种方法可以可靠判断json.city是否为undefined:

  • 最安全的类型判断:使用typeof操作符,即使json对象中没有city属性也不会报错
    typeof json.city === 'undefined'
    
  • 属性存在性检查:直接判断json是否包含city属性
    'city' in json === false
    
  • 简单真值判断(适合geo.js场景,它不会返回空字符串的city):
    !json.city
    

修改后的完整代码

下面是调整后的脚本,当未检测到城市时,给citybody设置替代内容(比如“未知城市”),同时也给地区信息做了同样的容错处理:

<script async src="https://get.geojs.io/v1/ip/geo.js"></script>
<script type="application/javascript">
function geoip(json){
    var userip = json.ip;
    var city = json.city;
    var region = json.region;
    
    console.log(json.city);
    console.log(json.region);
    console.log(json.ip);
    
    // 处理城市信息,不存在则显示替代文本
    var displayCity = typeof json.city === 'undefined' ? '未知城市' : json.city;
    // 处理地区信息,避免同样的undefined问题
    var displayRegion = typeof json.region === 'undefined' ? '未知地区' : json.region;

    document.getElementById("city").innerHTML = displayCity;
    document.getElementById("region").innerHTML = displayRegion;
    document.getElementById("citybody").innerHTML = displayCity;
    document.getElementById("regionbody").innerHTML = displayRegion;
    document.getElementById("region3").innerHTML = displayRegion;
}   
</script>

额外提示

如果geo.js在无法获取城市时可能返回空字符串,可以把判断条件扩展为!json.city || json.city.trim() === '',覆盖空值的情况。

内容的提问来源于stack exchange,提问作者I suck at coding

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 21:50:31