背景
最近 开始接触到一些ES6以后的新特性 使用起来确实方便了不少
尤其是最近有一个项目 在方法中需要传入index 但是在做非空验证的时候 如果传入的index是0 也会被判断为false 这就十分头疼了
冗余的判断不仅使代码的可读性变差 而且会使代码变得不简洁
但是在接触到可选链操作符后 emmmmm 这也太香了 避免了 && 和 多余的非空校验
所以决定以此为开始 陆续的写一些ES6 ES7...之后的新特性
可选链操作符
初识
这里我引用一段MDN上的解释
或许 你还是?????
不要急 我们来看一道例题
上述例子adventurer.weapon?.name
我们试图去寻找adventurer对象下的weapon属性下的name属性
adventurer对象有weapon属性 所以返回我们可以取出我们的大师剑
然后是adventurer.savePrincess?.()
显然adventurer下没有savePrincess这个方法 所以救公主??? 不存在的 直接返回undefined
最后是adventurer.shield?.name
同样的 我们发现 adventurer对象下也没有shield属性 所以直接返回undefined
好啦 至此 我们大概理解了可选链是怎么一回事
接下来 我们来看看 可选链有什么需要注意的地方
注意点
可选链不能用于赋值
短路计算
当在表达式中使用可选链时,如果左操作数是 null 或 undefined,表达式将不会被计算,例如:
最后再举一个自己在实际开发中的例子
假如有一个方法setStudentResult(action)
它接收一个对象action
为了让我们的代码健壮 我们必须在方法内部做出参数的非空校验 显然下面这样是不行的
如果我们直接调用setStudent()
显然整个程序都会崩溃
所以在以前 我们可以将方法体改成这样
但是 如果使用可选链操作符 我们就可以将方法定义成如下
可以看到 无论是可读性 还是简洁程度 可选链操作符都更胜一筹
空值合并操作符
还是引用一段MDN上解释
对比 ||
我们知道 || 逻辑或运算符 也具有相似的功能
也就是在 || 左侧操作数为假值时 会返回右侧 操作数
JS中的假值有
-
0
-
''
-
NaN
-
null
-
undefined
所以设想一个场景 我们对一个function中的参数使用 || 运算符 来判断用户是否输入
上述代码我们用 || 运算符来判断用户 用户输入的合法性
但是这样我们就无法排除 0 这种情况
如果用户就是输入了0 但是0依旧是一个假值 所以还是会返回 || 操作符右侧是操作数
这就与我们的预期不一致了
而 ?? 空值合并操作符就只是检验了 null 和 undefined
注意点
短路计算
与 OR 和 AND 逻辑操作符相似,当左表达式不为 null 或 undefined 时,不会对右表达式进行求值
不能与 AND 或 OR 操作符共用
与可选链操作符连用
两个操作符都是针对 undefined 和 null 两个值
所以我们可以结合这两个操作符
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!