Javascript 赋值运算符的替代方法

Javascript 赋值运算符的替代方法,javascript,Javascript,这是我经常使用的一种模式 const bus = this.state.channels[name] = this.state.channels[name] || new EventEmitter() 理想情况下,我希望使用一个类似Ruby的操作符,这是一个被拒绝的特性请求 const bus = this.state.channels[name] ||= new EventEmitter() 任务如下: 阅读一个复合词以达到其价值 如果未初始化,请设置默认值 定义

这是我经常使用的一种模式

const bus = this.state.channels[name] = 
            this.state.channels[name] || new EventEmitter()
理想情况下,我希望使用一个类似Ruby的操作符,这是一个被拒绝的特性请求

const bus = this.state.channels[name] ||= new EventEmitter()
任务如下:

阅读一个复合词以达到其价值 如果未初始化,请设置默认值 定义一个局部变量以使用较短的名称读取多次 我见过babel插件支持这样的东西,但它们被删除了

是否可以在不复制代码的情况下执行此任务?

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()

您也可以这样做,但仍然需要两个步骤:

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

你能更具体地说明一下这个片段应该做什么吗?它是延迟初始化的通道[name],还是通道是一个容器,在这个容器中,所有可能的键(即使尚未访问)都应始终可解析为非空值?如果在这之后像this.state.channels[name]被设置为其他值,则只需一个指针,总线将不会被解析updated@bippl它是一个缓存容器。尚未访问的密钥初始化为默认值value@Rajesh完全可以。当小函数希望访问长/详细路径中存储的某些值时,我经常使用这种模式。由于| |=不是一个合法的运营商,我想知道,除了我现在可以做的事情,是否还有一个不那么冗长的替代方法。嗯,我的问题现在是-3,所以这一定是个没用的问题:顺便说一句,第一个版本有101个字符,第二个版本只有-1。您可以通过更改临时变量的名称来减少字符数。@但是,您不应该关心字符数。如果你使用任何捆绑工具,如webpack、grunt或gulp,他们都会处理。你应该专注于写可读的代码。如果我在写,我宁愿使用If…==未定义的{…}。为了减少打字,我会在上面的答案中使用第二个建议。这将确保by变量始终具有最新值。你可以阅读我在问题下的评论,了解更多信息。