2012-03-29 9 views
80

w javascript, aby sprawdzić, czy zmienna nie została utworzona, po prostu zrobićcoffeescript Undefined

if (typeof MyVariable !== "undefined"){ ... } 

ja zastanawiam się, jak to zrobić w coffeescript? ... próbuję coś podobnego

if (MyVariable?false){ ... } 

ale ta kontrola, jeśli MyVariable jest funkcją, jeśli tak będzie wywoływać MyVariable (false), jeśli nie, to wywoła void (0) lub coś w tym stylu.

+0

Zobacz również [coffeescript not null lub undefined] (http://stackoverflow.com/q/20010245/1048572) – Bergi

+0

Spróbuj 'jeśli MyVariable isnt undefined' która produkuje' if (MyVariable! == void 0) '. –

Odpowiedz

153

Wreszcie znalazłem to łatwy sposób, aby to zrobić:

if (MyVariable?){ ... } 

która będzie generować:

if (typeof MyVariable !== "undefined" && MyVariable !== null){ ... } 

UPDATE 04/07/2014 Demo Link

enter image description here

+0

Znak zapytania jest drogą do zrobienia. Jest to pierwszy przykładowy blok kodu http://coffeescript.org/ - alert "Znam to!" czy elvis? –

+54

Właściwie to tylko generowane 'item! = Null' – Pencilcheck

+12

@Pencilcheck - to dlatego, że kompilator ustalił, że element został zdefiniowany w kodzie. (również, świetna nazwa - chociaż to dla mnie teraz tabletka sprawdź :) Ta odpowiedź również podnosi wartości null, które są bardzo różne od niezdefiniowanych.Wydaje się, że jest to odpowiedź na inne pytanie. IMHO – Seth

6

po prostu użyć:

if (myVariable) 
    //do stuff 

jako niezdefiniowany jest falsy będzie to robić tylko rzeczy jeśli myVariable nie jest zdefiniowana.

Po prostu trzeba mieć świadomość, że będzie to robić rzeczy 'dla wartości, które są 0, "" i zerowej

+1

Wolę tę metodę, o ile "mojaVariable" nie może być wartością falsyfikacyjną, taką jak 'null' lub' 0'. –

25

Po pierwsze, aby odpowiedzieć na pytanie:

if typeof myVariable isnt 'undefined' then # do stuff 

Rozwiązanie Magrangsa działa w większości przypadków, z wyjątkiem sytuacji, gdy trzeba rozróżnić niezdefiniowane i fałszywe (na przykład, jeśli moja zmienna może być prawdziwa, fałszywa lub niezdefiniowana).

I wystarczy podkreślić, że nie powinieneś owijać swoich warunków w nawiasy i nie powinieneś używać nawiasów klamrowych.

Słowa kluczowego then można użyć, jeśli wszystko jest na tym samym wierszu, w przeciwnym razie użyj wcięcia, aby wskazać, który kod znajduje się w tym stanie.

if something 
    # this is inside the if-statement 
# this is back outside of the if-statement 

Mam nadzieję, że to pomoże!

+0

Słowo kluczowe 'isnt' jest równoważne'! = 'W Coffeescript i może być bardziej czytelne, jeśli jesteś przyzwyczajony do javascript. –

+12

Równoważna do '! ==', nie '! =' –

+1

Jest to najbardziej konkretna odpowiedź - wiele innych również wchodzi w interakcje z wartościami pustymi. Thx – Seth

13

Ta odpowiedź dotyczy starszej wersji coffeescript. Zobacz Jaider's answer above jeśli chcesz bardziej aktualne odpowiedzi (od lipca 2014)

This coffeescript robi to, co chcesz, myślę:

if not MyVariable? 
    MyVariable = "assign a value" 

która produkuje:

if (!(typeof MyVariable !== "undefined" && MyVariable !== null)) { 
    MyVariable = "assign a value"; 
} 

nbjeśli zrobisz zadanie do MyVariable pierwsze, nawet jeśli ustawisz MyVariable undefined jak w this code, to kompiluje do:

if (!(MyVariable != null)) { 
    MyVariable = "assign a value"; 
} 

Wierzę, że to działa, ponieważ != wykorzystywane przez CoffeeScripts Existential Operator (znak zapytania) wymusza undefined być równym null.

p.s. Czy rzeczywiście możesz uzyskać if (MyVariable?false){ ... } do pracy? To nie kompiluje dla mnie, chyba że istnieje przestrzeń między operatorem egzystencjalnej i fałszywego IE MyVariable? false które następnie sprawia coffeescript sprawdzić jak funkcja powodu false który myśli jest parametrem dla MyVariable, for example:

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"); 
} 
+0

Dlaczego głosowanie w dół? – AJP

+3

to jest stary skrypt do kawy. zmienna? 'teraz kompiluje się tylko do zmiennej! = null – Gambai

+0

@Gambai jesteś pewien? Strona wciąż pokazuje '...! == null' http://coffeescript.org/#try:variable%3F – AJP

3

najczystszy sposób znalazłem przypisanie zmiennej do zmiennej niezdefiniowanej i nie null korzysta unless:

unless (myVar?) 
    myVar = 'val' 
+6

'myVar? = 'Val'' – Ricket

1

Dlaczego po prostu nie użyć idiomu LUB?

myVar or 'val' 

Wynik będzie więc myVar, o ile nie jest niezdefiniowany, w takim przypadku będzie równy "val".

+3

Z tym idiomem każda falsywna wartość zwróci" val "zamiast tego, co powinno być - w tym '''', '0.0' i' false'. Który prawdopodobnie nie jest niechciany. – toriningen

9

Oprócz Jaider's answer powyżej (nie mogę wypowiedzieć się z powodu niewystarczającej reputacji) uważać, że to zupełnie inna sprawa, czy to coś wewnątrz obiektu/tablicy:

someArray['key']? 

zostaną zamienione na :

someArray['key'] != null 

Zrzut ekranu z js2coffee.org:

js2coffee.org

+0

Sprawdzasz, czy klucz istnieje, więc ma to sens. Jeśli musisz sprawdzić, czy tablica istnieje, spróbuj someArray? ['Key']? –