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

使用PokeAPI开发宝可梦图鉴时if语句判断类型失效问题求助

问题排查与解决方案

嗨,我来帮你搞定这个问题~

你这段代码始终走else分支的原因很明确:hasOwnProperty()方法只能检查对象自身的直接属性名,而你传入的"types[1].type.name"是一个嵌套的属性路径,并不是data对象的直接属性,所以它永远会返回false,自然就一直执行else里的逻辑了。

针对PokeAPI返回的宝可梦类型结构(types是一个数组,每个元素包含type.name),我们可以用更直接的方式判断是否存在第二种属性:

方案1:检查数组长度

因为宝可梦的类型都存在于types数组中,直接判断数组长度是否大于1即可:

if (data.types.length > 1) {
  type.innerHTML = "Types: " + data.types[0].type.name + ", " + data.types[1].type.name;
} else {
  type.innerHTML = "Type: " + data.types[0].type.name;
}

方案2:直接判断第二个元素是否存在

数组中不存在的索引会返回undefined,所以可以直接检查data.types[1]是否存在:

if (data.types[1]) {
  type.innerHTML = "Types: " + data.types[0].type.name + ", " + data.types[1].type.name;
} else {
  type.innerHTML = "Type: " + data.types[0].type.name;
}

额外提示(可选)

如果想要更严谨,避免中间属性不存在导致报错(比如极端情况下data.types[0].type不存在),可以用可选链操作符?.来做安全访问:

const primaryType = data.types[0]?.type?.name;
const secondaryType = data.types[1]?.type?.name;

if (secondaryType) {
  type.innerHTML = `Types: ${primaryType}, ${secondaryType}`;
} else {
  type.innerHTML = `Type: ${primaryType}`;
}

这样就能正确区分单属性和多属性的宝可梦啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:57:57