赋值运算符的替代

时间:2017-10-25 07:34:28

标签: javascript

这是我经常使用的模式

const bus = this.state.channels[name] = 
            this.state.channels[name] || new EventEmitter()

理想情况下,我想使用类似Ruby的运算符(这是一个被拒绝的功能请求)

const bus = this.state.channels[name] ||= new EventEmitter()

任务是这样的:

  1. 阅读复合物以达到价值
  2. 如果未初始化
  3. ,请设置默认值
  4. 使用较短的名称
  5. 定义一个局部变量以多次读取

    我看过babel插件提交支持这样的东西,但是他们被删除了。

    是否可以在没有代码重复的情况下执行此任务?

2 个答案:

答案 0 :(得分:2)

JavaScript中没有||=

您问题中的第一个代码段是可用的最短选项:

const bus = this.state.channels[name] = 
            this.state.channels[name] || new EventEmitter()

换句话说,你做得对。

也就是说,如果你想稍微缩短作业,你可以将this.state.channels分配给一个临时变量:

const channels = this.state.channels;
const bus = channels[name] = channels[name] || new EventEmitter()

答案 1 :(得分:0)

你也可以这样做,但它仍然是两步:

const bus = this.state.channels[name] || new EventEmitter();
this.state.channels[name] = bus;