问题描述
我已经在答案here中阅读了这个技巧,
可以像这样验证foo
属性的存在:
const {foo = foo} = bar
它抛出未捕获的ReferenceError:当foo
为undefined
时,无法在初始化之前访问'foo'。
这是JS中定义明确的行为吗?对于所有最近的JavaScript版本和环境(浏览器,节点)以及将来的所有可能的版本和环境,都可以可靠地工作吗?
如果我不关心收到更具体的错误消息,我试图看看是否可以将其用作便捷的速记验证。 谢谢。
解决方法
这是JS中定义明确的行为吗?
是的。它依赖于const
和let
的{{3}}变量。但是,如果将这些代码编译到var
,则可能无法正常工作。
我正在尝试将它用作便捷的速记验证是否有意义
不,请不要。这确实是晦涩难懂的代码,每个短毛猫都会抱怨use-before-define。即使您不关心特定的错误消息,也至少要使用
const {foo = error()} = bar;
具有抛出error
的功能以使意图清楚。