{foo = foo}验证技巧是否可以破坏采用的安全模式?

问题描述

我已经在答案here中阅读了这个技巧, 可以像这样验证foo属性的存在:

const {foo = foo} = bar

它抛出未捕获的ReferenceError:当fooundefined时,无法在初始化之前访问'foo'

这是JS中定义明确的行为吗?对于所有最近的JavaScript版本和环境(浏览器,节点)以及将来的所有可能的版本和环境,都可以可靠地工作吗?

如果我不关心收到更具体的错误消息,我试图看看是否可以将其用作便捷的速记验证。 谢谢。

解决方法

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

是的。它依赖于constlet的{​​{3}}变量。但是,如果将这些代码编译到var,则可能无法正常工作。

我正在尝试将它用作便捷的速记验证是否有意义

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

const {foo = error()} = bar;

具有抛出error的功能以使意图清楚。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...