XML解析:如何简洁判断属性是否存在并获取其值?
解决方法:属性存在时才返回其值的最简实现
问题根源
你遇到的报错是因为当属性不存在时,attributes.getNamedItem('cover')会返回null,此时直接访问.value会触发TypeError(无法读取null的value属性)。而原示例中category属性所有元素都有,所以不会出现这个问题。
最简方案
以下几种写法都能实现需求,按简洁度排序:
- 可选链操作符(推荐,ES2020+)
直接用可选链跳过null/undefined的属性访问,不存在时返回undefined:
const coverValue = book.attributes.getNamedItem('cover')?.value;
- 使用
getAttribute()getAttribute()本身会在属性不存在时返回null,无需额外判断就能安全获取:
const coverValue = book.getAttribute('cover'); // 后续需要的话可以判断:if (coverValue) { ... }
- 先判断属性是否存在
如果需要兼容旧环境,用条件判断先检查属性节点:
const coverAttr = book.attributes.getNamedItem('cover'); const coverValue = coverAttr ? coverAttr.value : null;
对比冗余写法
这些方法都避免了重复的条件嵌套,直接通过原生API或语法糖实现安全访问,比手动遍历属性或多层判断简洁得多。
内容的提问来源于stack exchange,提问作者NALL
相关产品推荐
相关产品推荐

