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

jQuery $.inArray判断对象不存在属性误返回true问题求解

问题原因

你代码的核心问题是API用错+逻辑写错,具体有三点:

  • $.inArray的设计用途是在数组中查找指定值的下标,仅能接收数组作为检索源。你传入普通对象作为检索目标时,方法内部的类型转换会导致返回结果完全不符合预期,根本无法正确判断对象是否包含某个键。
  • 你写的city判断存在两个低级错误:一是检索范围写错了,city字段存在于接口返回的address对象下,你却传了整个response对象作为检索源;二是判断条件写为!== 0,就算$.inArray能正常工作,这个条件的逻辑也是完全错误的,另外你的console.log语句缺少右括号,本身就有语法问题。
  • 你用了两个平级的if判断,没有设置分支优先级,只要条件成立就会依次执行内部逻辑,就算键的判断是正确的,后执行的分支也会覆盖前一个分支的赋值结果,自然会出现多个日志同时打印、结果冲突的问题。
修复代码

判断普通JS对象是否存在某个自有键,直接用原生hasOwnProperty方法即可,不需要借助jQuery方法,同时调整分支优先级:优先读取city字段,仅当city不存在时,再读取neighbourhood字段,还可以补充兜底逻辑适配Nominatim在不同地区返回的地址字段差异(部分区域不会返回city,会返回town、village、suburb等字段):

const address = response.address;
let locationResult = '';

if (address.hasOwnProperty('city')) {
  console.log('city only');
  locationResult = address.city;
} else {
  // 大城市/首都无city字段时取neighbourhood
  if (address.hasOwnProperty('neighbourhood')) {
    console.log('neighbourhood only');
    locationResult = address.neighbourhood;
  } 
  // 兜底适配其他行政层级字段
  else if (address.hasOwnProperty('town')) {
    locationResult = address.town;
  } else if (address.hasOwnProperty('suburb')) {
    locationResult = address.suburb;
  } else if (address.hasOwnProperty('village')) {
    locationResult = address.village;
  }
}

补充:如果场景里不需要区分原型链属性,也可以直接写if (address.city)做真值判断。Nominatim返回的有效地址字段不会是空字符串、null这类假值,这种写法在当前业务场景下也能正常运行,但hasOwnProperty是更严谨的通用方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 03:18:25