Answers:
您所要求的运算符已被建议作为JavaScript的功能。它目前处于第3阶段,因此尚不是该语言的正式组成部分,但是它将被接受,并且如果他们发现主要的意外问题,最多只能进行很小的更改。
您现在可以使用plugin-proposal-logic-assignment-operators Babel插件来使用它。我从未使用过该插件,所以我不知道它的效果如何。
Ruby的|| =运算符短路分配。可以这样想:
return a || a = b
因此,在javascript中,这看起来非常相似:
return a || (a = b);
但是,正如下面的评论所指出的那样,这种字面的红宝石形式比标准的JavaScript惯用语a = a ||效率低。b。
供参考:http : //www.rubyinside.com/what-rubys-double-pipe-or-equals-really-does-5488.html
a = a || b
形式似乎更合适jsperf.com/x-or-x-equals-0-vs-x-equals-x-or-0/3
a || (a = b)
具有推断功能名称的正确语义。目前正在讨论新提案。
您可以在javascript中仅对整数使用| =运算符来实现所需的行为。但是您必须先定义变量。
let a = 0
a |= 100
console.log(a) // 100
对于对象
let o = {}
o.a |= 100
console.log(o) // {a: 100}
对于阵列
let arr = []
arr[0] |= 100
console.log(arr) // [100]
|
还是|=
。问题中所需的行为与按位运算无关。
x
是虚假的(如)false
,并且只想在x
未定义时设置默认值,则应谨慎使用。