Wiem, że w php 5.3 zamiast używać tej redundantnej składni operatora trójskładnikowego:
startingNum = startingNum ? startingNum : 1
... możemy użyć skróconej składni dla naszych operatorów trójskładnikowych tam, gdzie ma to zastosowanie:
startingNum = startingNum ?: 1
Wiem o operatorze trójskładnikowym w javascript:
startingNum = startingNum ? startingNum : 1
... ale czy istnieje skrót?
javascript
ternary-operator
Projektant stron internetowych
źródło
źródło
||
zamiast??
?||
operator JS nie zwraca prawdy ani fałszu, zwraca pierwszą wartość „prawdziwą”. Załóżmy, że maszval0
ival1
jakundefined
, ival2
jest2
,val3
jest3
.val0 || val1 || val2 || val3
zwróci2
, ponieważ jest to pierwsza „prawdziwa” wartość.||
zwróci pierwszą prawdziwą wartość, którą napotka, i dlatego może być używany jako operator łączenia, podobnie jak w języku C #??
źródło
Tak jest:
Ogólnie
expr1 || expr2
działa w następujący sposób (o czym wspomina dokumentacja ):źródło
if a is truthy
vs.if a is evaluated to true
?W takim przypadku możesz użyć operatora OR.
źródło
Jeśli masz warunek z null, na przykład
możesz użyć '&&'
źródło
anything && null
oszacowany na zero, chyba żeanything
jest fałszywy?Powyższe odpowiedzi są prawidłowe. W JavaScript następujące oświadczenie:
można wyrazić jako
Innym scenariuszem, którego tutaj nie omówiono, jest sytuacja, w której wartość ma zwracać fałsz, gdy nie jest dopasowana. Skrót JavaScript dla tego to:
Ale można to wyrazić jako
Chciałem tylko opisać inny scenariusz na wypadek, gdyby inni szukali bardziej uogólnionej odpowiedzi.
źródło
x = innerWidth * 0.0375 > 24 ? innerWidth * 0.0375 : 24
???innerWidth * 0.0375 > 24
różni się odif true
części, która jestinnerWidth * 0.0375
. Skrót może być używany tylko wtedy, gdyexpression to be evaluated
i theif true
mają tę samą wartość. To samo, dlaczego nie byłbyś w stanie stenografowaćx = someBoolean ? 'Heck yea!' : 'No way!'
.Math.max(innerWidth * 0.0375, 24)
Math.max
działa lepiej niż operator trójskładnikowy w twoim przypadku użycia.startingNum = startingNum ? otherNum : 1
można wyrazić jakostartingNum = otherNum || 1
” jest błędne. właśnie to przetestowałemAby utworzyć trójskładnik, taki jak:
w javascript możesz:
Przykład:
źródło
x = innerWidth * 0.0375 > 24 ? innerWidth * 0.0375 : 24
stanie się(innerWidth * 0.0375 > 24 && innerWidth * 0.0375) || 24
?? czy istnieje skrót, więc nie muszę powtarzaćinnerWidth * 0.0375
, poza przypisaniem go do zmiennej ???Math.max( innerWidth * 0.0375 , 24 )
działałby elegancko. W bardziej ogólnym przypadku dobrze byłoby utworzyć opisową metodę o nazwie np. „SomethingifiedInnerWidth”, która poprawi czytelność, zamiast tworzyć zmienną. Chociaż w niektórych przypadkach bardziej czytelne byłoby posiadanie zmiennej (o tej opisowej nazwie), więc w przyszłości pytanie „dlaczego jest mnożone przez to?” nie jest podniesiony.Math.max
. super eleganckie rozwiązanie !!