javascript - {foo = foo} 验证技巧是在解构要采用的安全模式吗?
问题描述
我在这里的答案中读到了这个技巧,可以验证是否存在foo
这样的属性:
const {foo = foo} = bar
它抛出Uncaught ReferenceError: Cannot access 'foo' before initialization when foo
is undefined
。
这是 JS 中定义明确的行为吗?这对所有最近的 JavaScript 版本和环境(浏览器、节点)和可能的未来版本是否可靠?
如果我不关心是否有更具体的错误消息,我正在尝试查看是否可以开始使用它作为方便的速记验证。谢谢。
解决方案
这是 JS 中定义明确的行为吗?
是的。它依赖于 和 变量的时间死区。如果将这些转换为,它可能不起作用。const
let
var
我想看看开始使用它作为一种方便的速记验证是否有意义
不,请不要。这确实是晦涩难懂的代码,每个 linter 都会抱怨 use-before-define。即使您不关心特定的错误消息,至少使用
const {foo = error()} = bar;
带有投掷error
功能以明确意图。
推荐阅读
- pycharm - 如何将 Tab 键映射到 WebStorm 中的 *select* 自动完成选项,而不是 *inserting* 它们
- visual-studio-code - 在 VScode markdown 中显示 Julia 代码输出
- agora.io - agora websdk 得到 obs 相机而不是我的笔记本电脑相机
- azure - 使用 Azure 的 Helm 导致 401 Unauthorized
- javascript - React Router - 身份验证后的重定向延迟
- java - CompletedStage.completedFuture VS CompletedStage.completedStage
- c++ - 如何制作“#include
" 和 "使用命名空间 ocilib" 在 Eclipse c++ 中实现了吗? - .htaccess - 重定向包含锚点 (#) 的 url
- python - Django允许为单个记录上传多个文件
- java - 我刚刚安装了flutter android studio和dart,但是现在当我通过简单地运行初始代码来检查我的模拟器设置时,它会显示错误