遇到的问题
在使用nodejs访问字典或列表内嵌套的字典或列表的某个内容的时候,对于其中某个键值对是否存在不能确定,直接进行访问会产生报错
比如,现有如下一个列表,列表内有三个字典。当访问列表第三项的键 'v' 的内容时,如下代码可以正常输出
var ls = [{'v':1}, {'v':2}, {'v':3}]
console.log(ls[2]['v']) // [OUT]: 3
当访问列表第四个元素(假定是字典)的键 'v' 的时候会直接抛出如下错误信息
var ls = [{'v':1}, {'v':2}, {'v':3}]
console.log(ls[3]['v'])
// [OUT]: TypeError: Cannot read property 'v' of undefined
当对一些不确定是否存在的键值对的内容进行访问的时候,可以通过使用短路判断来进行处理,如下。原理是进行第一个判断的时候先确认是否存在该键值对,如果不存在,由于后面是与运算,所以没有比较进行后面的条件表达式的判断,这时候会直接结束判断,不会触发后面的条件表达式的报错。
var ls = [{ 'v': 1 },{ 'v': 2 },{ 'v': 3 }]
if (ls[2] != undefined && ls[2]['v'] == 3) {
console.log(ls[2]['v'])
}
else {
console.log(`ls[2] is undefined`)
}
if (ls[3] != undefined && ls[3]['v'] == 4) {
console.log(ls[3]['v'])
}
else {
console.log(`ls[3] is undefined`)
}
// [OUT]: 3
// ls[3] is undefined
但是使用这种方法过于繁琐,也不够美观(反正我不喜欢)。实际上存在一种更加便捷的方式实现我们的需求的效果。
var ls = [{ 'v': 1 },{ 'v': 2 },{ 'v': 3 }]
console.log(ls[2]['v'])
console.log(ls[3]?.v)
// [OUT]: 3
// undefined
如上代码,通过对不确定的元素使用`?.`来访问它的内容,当键值对不存在的时候,会直接返回undefined而不是出现报错