W javascript, aby sprawdzić, czy zmienna nigdy nie została utworzona, po prostu robimy
if (typeof MyVariable !== "undefined"){ ... }
Zastanawiałem się, jak to zrobić w skrypcie kawowym? ... Próbuję czegoś takiego
if (MyVariable?false){ ... }
ale to sprawdzenie, czy MyVariable
jest funkcją, jeśli tak, to wywoła MyVariable (false), jeśli nie, to wywoła void (0) lub coś w tym rodzaju.
coffeescript
undefined
Jaider
źródło
źródło
if MyVariable isnt undefined
który produkujeif (MyVariable !== void 0)
.Odpowiedzi:
Wreszcie znalazłem na to prosty sposób:
if (MyVariable?){ ... }
który wygeneruje:
if (typeof MyVariable !== "undefined" && MyVariable !== null){ ... }
AKTUALIZACJA 04/07/2014 Łącze demonstracyjne
źródło
item != null
undefined
? A może musisz się wtedy uciecif typeof myVariable isnt 'undefined'
?==
i!=
) w rzeczywistości traktująnull
iundefined
jako równe wartości, więc witem != null
rzeczywistości testuje zarówno dla, jaknull
iundefined
jednocześnie. Nie, jeśli jest napisane jakoitem !== null
.Po pierwsze, aby odpowiedzieć na twoje pytanie:
if typeof myVariable isnt 'undefined' then # do stuff
Rozwiązanie Magrangsa zadziała w większości przypadków, z wyjątkiem sytuacji, gdy trzeba rozróżnić między niezdefiniowanymi a fałszywymi (na przykład, jeśli mojaZmienna może mieć wartość prawda, fałsz lub nieokreślona).
Aby zaznaczyć, nie powinieneś zawijać warunków w nawiasach i nie powinieneś używać nawiasów klamrowych.
Słowa
then
kluczowego można użyć, jeśli wszystko znajduje się w tym samym wierszu, w przeciwnym razie użyj wcięcia, aby wskazać, jaki kod znajduje się w warunku.if something # this is inside the if-statement # this is back outside of the if-statement
Mam nadzieję że to pomoże!
źródło
isnt
Kluczowe jest równoważne!=
w coffeescript i może być bardziej czytelny, jeśli jesteś przyzwyczajony do javascript.!==
, nie!=
!=
in Coffee, co przekłada się!==
na JavaScript.Ta odpowiedź dotyczy starszej wersji Coffeescript. Zobacz odpowiedź Jaidera powyżej, jeśli chcesz uzyskać bardziej aktualną odpowiedź (stan na lipiec 2014)
Myślę, że ten skrypt kawowy robi to, co chcesz:
if not MyVariable? MyVariable = "assign a value"
Który produkuje:
if (!(typeof MyVariable !== "undefined" && MyVariable !== null)) { MyVariable = "assign a value"; }
Uwaga, jeśli dokonasz przypisania do
MyVariable
first, nawet jeśli ustawisz wartośćMyVariable
undefined, jak w tym kodzie , to kompiluje się do:if (!(MyVariable != null)) { MyVariable = "assign a value"; }
Uważam, że to działa, ponieważ
!=
używany przez CoffeeScriptsExistential Operator
(znak zapytania) wymuszaundefined
równośćnull
.ps Czy faktycznie możesz zabrać się
if (MyVariable?false){ ... }
do pracy? Nie kompiluje się dla mnie, chyba że istnieje spacja między operatorem egzystencjalnym a fałszem,MyVariable? false
co powoduje, że CoffeeScript sprawdza go jak funkcję, z powodu tego,false
co uważa za parametr dla twojegoMyVariable
, na przykład :if MyVariable? false alert "Would have attempted to call MyVariable as a function" else alert "but didn't call MyVariable as it wasn't a function"
Produkuje:
if (typeof MyVariable === "function" ? MyVariable(false) : void 0) { alert("Would have attempted to call MyVariable as a function"); } else { alert("but didn't call MyVariable as it wasn't a function"); }
źródło
variable?
now only kompiluje się do zmiennej! = null... !== null
coffeescript.org/#try:variable%3Ftypeof MyVariable isnt "undefined"
z js2coffee
źródło
Oprócz odpowiedzi Jaidera powyżej (nie mogłem komentować z powodu niewystarczającej reputacji) , uważaj, że jest inaczej, jeśli jest to coś wewnątrz obiektu / tablicy:
someArray['key']?
zostanie przekonwertowany na:
someArray['key'] != null
Zrzut ekranu z js2coffee.org :
źródło
Po prostu używam:
if (myVariable) //do stuff
Ponieważ undefined jest fałszywa, będzie działać tylko wtedy, gdy myVariable nie jest niezdefiniowana.
Musisz tylko być świadomy, że zrobi to dla wartości 0, „” i null
źródło
myVariable
nie może być fałszywą wartością, taką jaknull
lub0
.Najczystszym sposobem przypisania zmiennej do niezdefiniowanej i niezerowej zmiennej jest użycie
unless
:unless ( myVar? ) myVar = 'val'
źródło
myVar ?= 'val'
Dlaczego nie użyć po prostu idiomu OR?
myVar or 'val'
Tak więc wynik będzie równy myVar, chyba że jest on nieokreślony, w którym to przypadku będzie równy „val”.
źródło
''
,0.0
ifalse
. Co prawdopodobnie nie jest niepożądane.