Ruby的|| =(或等于)在JavaScript中?

我喜欢Ruby的||=机制。 如果一个variables不存在或者nil ,那么创build它并将其设置为等于某事:

 amount # is nil amount ||= 0 # is 0 amount ||= 5 # is 0 

我现在需要在JavaScript中做类似的事情。 什么是常规或正确的方法来做到这一点? 我知道||=是无效的语法。 处理它的两个明显的方法是:

 window.myLib = window.myLib || {}; // or if (!window.myLib) window.myLib = {}; 

两者都是绝对正确的,但是如果你正在寻找像Ruby中那样工作的东西。 第一种方法是variable = variable || {} variable = variable || {}是你正在寻找的人:)

您可以使用逻辑OR运算符|| 如果lVal是一个伪数值,它将评估它的右操作数。

Falsy值包括例如null,false,0,"",undefined,NaN

var x = x || 1 var x = x || 1 ;

如果你正在使用对象,你可以使用解构(从ES6开始)如下:

 ({ myLib: window.myLib = {} } = window); 

…但除了混淆之外,你不能接受任何接受的答案。

Ruby的|| =运算符短路分配。 可以这样想:

 return a || a = b 

所以在JavaScript中,这看起来非常相似:

 return a || (a = b); 

但是,在下面的评论中似乎指出,这个字面上的rubyforms比标准的javascript成语a = a ||效率低。 湾

作为参考: http : //www.rubyinside.com/what-rubys-double-pipe-or-equals-really-does-5488.html