Kir*_*ash 2 javascript ecmascript-6
我有下面显示的代码,用于end_time从this.props.auction对象中解构属性
const {auction: {auction: {end_time}}} = this.props;
Run Code Online (Sandbox Code Playgroud)
但是这里的问题是,如果拍卖是一个空对象,则上述常量将是未定义的。为了解决这个问题,我已将代码更改为
if(Object.keys(this.props.auction).length) {
var {auction: {auction: {end_time}}} = this.props;
} else {
var {end_time} = "";
}
Run Code Online (Sandbox Code Playgroud)
上述解决方案有效但很丑陋,我相信肯定有更好的方法来做到这一点。
按照这篇文章的答案和
到目前为止,我的尝试是:
const {auction: {auction: {end_time = null}}} = this.props || {};
Run Code Online (Sandbox Code Playgroud)
我认为上面end_time的默认设置为,null但我猜因为auction没有定义它会抛出一个错误。
请提出一个更好的方法来声明end_time一个空的常量auction
你并不需要使用解构你每次可以使用它。
const auction = this.props.auction.auction;
const end_time = auction === undefined ? null : auction.end_time;
Run Code Online (Sandbox Code Playgroud)
您可能会使用具有以下默认值的解构:
const { auction: { auction: { end_time = null } = {} } = {} } = this.props || {};
Run Code Online (Sandbox Code Playgroud)
但是因为上面的语法很麻烦而且不自然,所以在这种情况下我最终屈服于Ry 的建议:
你并不需要使用解构你每次可以使用它。
我意识到这被标记为ecmascript-6,但这个问题提供了一个很好的例子,其中使用可选链运算符和空合并运算符似乎是最自然的解决方案,至少当它们正式合并到 ECMAScript 2020 规范时:
const end_time = this.props?.auction?.auction?.end_time ?? null;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1333 次 |
| 最近记录: |