Zastanawiam się, czy istnieje krótsza droga to napisać:Shorthand if/else JavaScript
var x = 1;
if(y != undefined) x = y;
początkowo próbował x = y || 1
, ale to nie działa. Jaki jest właściwy sposób, aby to osiągnąć?
Zastanawiam się, czy istnieje krótsza droga to napisać:Shorthand if/else JavaScript
var x = 1;
if(y != undefined) x = y;
początkowo próbował x = y || 1
, ale to nie działa. Jaki jest właściwy sposób, aby to osiągnąć?
var x = y !== undefined ? y : 1;
Zauważ, że var x = y || 1;
byłoby przypisać 1
dla każdego przypadku y
jest falsy (np false
, 0
, ""
), które mogą być, dlaczego „nie działa” dla Ciebie. Ponadto, jeśli y
jest zmienną globalną, jeśli naprawdę nie jest zdefiniowana, może wystąpić błąd, chyba że uzyskasz dostęp do niego jako window.y
.
Jak vol7ron sugeruje w komentarzach, można również użyć typeof
aby uniknąć potrzeby odwoływania się do globalnych Vars jak window.<name>
:
var x = typeof y != "undefined" ? y : 1;
Yay dla operatorów trójskładnikowych. Wypróbuję to. Edycja: Ah, okej. A co z "niezdefiniowanym"? Nie wydawało się, żeby to złapało. –
Co masz na myśli? Ciąg 'undefined'' jest wartością rzeczywistą i nie jest równy rzeczywistej wartości' undefined'. – Amber
Miałem na myśli, gdy zmienna nie została w ogóle zadeklarowana. Wiem, że ciąg "niezdefiniowany" jest wartością logiczną prawda, ale tego nie szukałem. –
y = (y != undefined) ? y : x;
Nawiasy nie są konieczne, po prostu dodaj ponieważ uważam, że łatwiej jest je czytać w ten sposób.
Twoje pareny są niezrównoważone (a także niepotrzebne). – Amber
@Amber W momencie, w którym zaczynasz używać skrótu javscript, już mówisz, że nie zależy Ci na czytelności, więc po co zawracać sobie głowę zrównoważonymi parensami ?. –
Innym sposobem napisać go krótko
bePlanVar = !!((bePlanVar == false));
// is equivalent to
bePlanVar = (bePlanVar == false) ? true : false;
// and
if (bePlanVar == false) {
bePlanVar = true;
} else {
bePlanVar = false;
}
inny sposób niż trójskładnikowych użyciu zwarciowe:
typeof y !== 'undefined' && y || 1
Chociaż nadal uważam trójargumentowy bardziej czytelne ...
Oto sposób na to, który działa, ale może nie być najlepszą praktyką dla jakiegokolwiek języka:
var x,y;
x='something';
y=1;
undefined === y || (x = y);
alternatywnie
undefined !== y && (x = y);
Po prostu zauważyłem, że został już dostarczony przez @AndreFigueiredo – Nemesarial
'x = y || x' działa, jeśli nie dba o nieokreślonej ścisłym ** ** – Nemesarial