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

