Eu amo o ||=
mecanismo de Ruby . Se uma variável não existir ou for nil
, crie-a e defina-a como algo:
amount # is nil
amount ||= 0 # is 0
amount ||= 5 # is 0
Eu preciso fazer algo semelhante em JavaScript agora. Qual é a convenção ou a maneira correta de fazer isso? Eu sei que ||=
não é uma sintaxe válida. 2 maneiras óbvias de lidar com isso são:
window.myLib = window.myLib || {};
// or
if (!window.myLib)
window.myLib = {};
javascript
ruby
syntax
às.
fonte
fonte
x
for falso, comofalse
, e você desejar definir um padrão quandox
indefinido.Você pode usar o operador OR lógico
||
que avalia seu operando correto selVal
for um valor falso.Os valores de falsidade incluem, por exemplo,
null, false, 0, "", undefined, NaN
fonte
x
for falso, comofalse
, e você desejar definir um padrão quandox
indefinido.Se você estiver trabalhando com objetos, poderá usar a desestruturação (desde o ES6) da seguinte forma:
... mas você não ganha nada sobre a resposta aceita, exceto confusão.
fonte
O operador que você perguntou foi proposto como um recurso em JavaScript . Atualmente , ele está no Estágio 3 , portanto ainda não é uma parte oficial do idioma, mas será aceito, com alterações mínimas se descobrirem grandes problemas inesperados.
Agora você pode usá-lo usando o plug-in Babel plugin-proposta-lógica-atribuição-operadores . Eu nunca usei esse plug-in, então não tenho idéia de como ele funciona.
fonte
Ruby || = atribuição de curto-circuito do operador. Pode-se pensar assim:
Então, em javascript, isso parece muito semelhante:
Parece, como indicado nos comentários abaixo, no entanto, que esse formato literal de rubi é menos eficiente que o idioma javascript padrão a = a || b.
Para referência: http://www.rubyinside.com/what-rubys-double-pipe-or-equals-really-does-5488.html
fonte
a = a || b
forma é mais ideal jsperf.com/x-or-x-equals-0-vs-x-equals-x-or-0/3a = a || b
.a || (a = b)
possui a semântica correta para inferir nomes de funções. Está atualmente em discussão para a nova proposta.Você pode obter o comportamento desejado usando o operador | = em javascript apenas para números inteiros. Mas você precisa definir a variável primeiro.
Para objetos
Para matrizes
fonte
|
ou|=
. O comportamento desejado na pergunta não está relacionado às operações bit a bit.