在 JavaScript 中,函数参数是可以选的。事实上,没有传递参数也是可以的。在 ES2020 中,新特性“可选参数 - chaining”被引入,是对函数参数可选性的一个增强。这个特性可以让你更加方便地操作对象和其属性。
可选参数 - chaining 是什么?
在 ES2020 中,可以通过给函数参数设置默认值的方式,让参数变成可选的。可选参数 - chaining 是指,通过使用可选参数的方式,可以在一个对象上链式地调用需要的属性,最终获取到想要的结果。
这个特性主要可以分为两个方面的应用:
- 可以省去一些代码,提高开发效率。
- 可以减少代码的错误率,提高代码的可读性和可维护性。
如何使用可选参数 - chaining?
在 JavaScript 中,我们通常需要使用大量的 if 语句来判断对象属性是否存在,并进行一些相关操作:
function getValue(obj) { if (obj && obj.prop1 && obj.prop1.prop2 && obj.prop1.prop2.prop3) { return obj.prop1.prop2.prop3; } }
但有了可选参数 - chaining,我们可以使用更加简洁的方式:
function getValue(obj) { return obj?.prop1?.prop2?.prop3; }
这样,只要有一个属性不存在,就会返回 undefined,而不会抛出异常。
示例代码
让我们来看一个详细的示例,来体验可选参数 - chaining 的具体应用。
首先,我们有一个数据对象:
-- -------------------- ---- ------- ----- ---- - - --- -- ----- - ----- -------- -------- - ----- ---- ------ -------- ------- -- --------- - - ----- -------- ------ ------------------- -- - ----- -------- ------ ------------- - - - --
我们想要获取该用户的邮件地址:
const email = data.user.contacts.find(contact => contact.type === 'email').value;
但这样做会有一个问题:如果数据中不存在 user 或其属性不存在,就会报错。为了防止这种情况,我们需要添加大量的 if 语句:
let email = ''; if (data && data.user && data.user.contacts) { const contact = data.user.contacts.find(contact => contact.type === 'email'); if (contact) { email = contact.value; } }
但如果使用可选参数 - chaining,我们可以大幅简化代码:
const email = data?.user?.contacts?.find(contact => contact.type === 'email')?.value ?? '';
这样就能够在避免异常抛出的情况下获取到正确的邮件地址。
总结
通过可选参数 - chaining 这个 ES2020 中的新特性,我们可以更加方便地操作对象的属性,减少代码数量,提高开发效率和可读性。同时也能够避免因为错误数据导致的异常,并且更加安全地处理数据。
在实际项目中,我们应该充分利用这个特性,编写高效可维护的代码,提升开发效率。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64f1c47ff6b2d6eab3b9c456