TS代码
image = this.selectedItem.image.url || null;
错误
TypeError: Cannot read property 'url' of null
我的问题是,为什么不是 || null 启动而不是抛出类型错误?
最佳答案
您拥有的最短选项是:
image = this.selectedItem && this.selectedItem.image && this.selectedItem.image.url || null;
如果任何一个&&
失败,您将得到null
,但您必须检查您尝试访问的对象的每个“级别”。
这是有效的,因为 &&
的操作顺序优先于 ||
。上面的语句类似于:
x = (((a.b) && (a.b.c)) && (a.b.c.url)) || null;
另一方面,您所拥有的类似于:
x = (a.b.c.url) || null;
如果a.b
没有属性c
,则无法获取url
。这就是错误被抛出的原因,而这不是最后的“或”可以捕捉到的。
关于javascript - 类型错误和短路评估?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46812592/