mi chiedo se c'è un modo più breve per scrivere questo:Stenografia if/else Javascript
var x = 1;
if(y != undefined) x = y;
inizialmente ho provato x = y || 1
, ma che non ha funzionato. Qual è il modo corretto di fare questo?
mi chiedo se c'è un modo più breve per scrivere questo:Stenografia if/else Javascript
var x = 1;
if(y != undefined) x = y;
inizialmente ho provato x = y || 1
, ma che non ha funzionato. Qual è il modo corretto di fare questo?
var x = y !== undefined ? y : 1;
Nota che var x = y || 1;
assegnerebbe 1
per ogni caso in cui y
è falsy (ad esempio false
, 0
, ""
), che può essere il motivo per cui "non ha funzionato" per voi. Inoltre, se è una variabile globale, se è veramente non definita, è possibile che si verifichi un errore a meno che non lo acceda come window.y
.
Come vol7ron suggerisce nei commenti, è possibile utilizzare anche typeof
per evitare la necessità di fare riferimento a vars globali come window.<name>
:
var x = typeof y != "undefined" ? y : 1;
Yay per gli operatori ternari. Ci proverò. Modifica: Ah, ok. Che dire di "indefinito"? Non sembra averlo capito. –
Cosa intendi? La stringa ''undefined'' è un valore vero e non è uguale al valore effettivo' indefinito'. – Amber
Intendevo, dove la variabile non è stata dichiarata affatto. So che la stringa "indefinita" valuta un valore booleano vero, ma non è quello che stavo cercando. –
y = (y != undefined) ? y : x;
La parentesi non sono necessari, ho appena aggiungo loro perché penso che sia più facile leggere in questo modo.
I tuoi paren sono sbilanciati (e anche non necessari). – Amber
@Amber Nel momento in cui inizi a usare la stenografia di javscript, stai già dicendo che non ti preoccupi della leggibilità, quindi perché preoccuparsi di un parental equilibrato ?. –
Un altro modo di scriverlo a breve
bePlanVar = !!((bePlanVar == false));
// is equivalent to
bePlanVar = (bePlanVar == false) ? true : false;
// and
if (bePlanVar == false) {
bePlanVar = true;
} else {
bePlanVar = false;
}
altro modo che ternario, utilizzando cortocircuito:
typeof y !== 'undefined' && y || 1
Anche se io continuo a pensare ternario più leggibile ...
Ecco un modo per farlo funziona, ma potrebbe non essere la pratica migliore per qualsiasi lingua in realtà:
var x,y;
x='something';
y=1;
undefined === y || (x = y);
alternativa
undefined !== y && (x = y);
Appena notato che questo è stato già fornito da @AndreFigueiredo – Nemesarial
'x = y || x' funziona se non si cura di rigorosa ** ** indefinito – Nemesarial