首页 > 解决方案 > {foo = foo} 验证技巧是在解构要采用的安全模式吗?

问题描述

我在这里的答案中读到了这个技巧,可以验证是否存在foo这样的属性:

const {foo = foo} = bar

它抛出Uncaught ReferenceError: Cannot access 'foo' before initialization when foois undefined

这是 JS 中定义明确的行为吗?这对所有最近的 JavaScript 版本和环境(浏览器、节点)和可能的未来版本是否可靠?

如果我不关心是否有更具体的错误消息,我正在尝试查看是否可以开始使用它作为方便的速记验证。谢谢。

标签: javascriptvalidationdestructuring

解决方案


这是 JS 中定义明确的行为吗?

是的。它依赖于 和 变量的时间死区如果将这些转换为,它可能不起作用。constletvar

我想看看开始使用它作为一种方便的速记验证是否有意义

不,请不要。这确实是晦涩难懂的代码,每个 linter 都会抱怨 use-before-define。即使您不关心特定的错误消息,至少使用

const {foo = error()} = bar;

带有投掷error功能以明确意图。


推荐阅读