可选链存在的意义
即使是最细心的程序员,也可能会不经意去访问一个不存在或者为空的值,导致代码报错。在没有可选链的时代,&&操作符通常是这个问题的最佳解决办法。
假如需要去访问一个user.name属性,可以采用下面的写法:
user&&user.name;
当&&左边的值为真时,就返回右边的值;当左边的值为假时,直接返回假。上面的代码中只有user存在的时候才会继续访问它的name属性。
在es6中,引入了可选链的概念,优化了上面的&&操作。
user?.name
使用上图可选链的写法,会先判断user是否存在,如果存在就访问他的name属性,如果没有存在就返回undefined。
可选链的作用和开头的&&操作用处相差无几,只是后者的一种优化。
你可能还没体会到它优化了什么,下面举个例子:
//你要访问的属性
user.company.address
//&&写法
user&&user.company&&user.company.address
//?.写法
user?.company?.address
漫天遍地的可选链?
可选链能够先判断前面的对象是否存在,如果不存在就不会执行后面的语句,然后直接返回undefined,不会因为访问到不存在的对象报错,增强了代码的健壮性。
可选链用来判断问号前面的值是否存在,如果在程序中所有访问属性的地方都用上可选链,那程序报错的个数就会大大降低。
但是,如果漫天遍地都用可选链,就会错失重要的报错信息。
如果在逻辑里一定会存在的数据上使用了可选链,当这个数据缺失时,我们就无法及时发现错误,平白浪费了精力时间。最好的做法是只在逻辑中可能会出现空值的地方使用可选链。