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

