Mam ten kod, który sprawdza pusty lub pusty ciąg. Działa na testach.
eitherStringEmpty= (email, password) ->
emailEmpty = not email? or email is ''
passwordEmpty = not password? or password is ''
eitherEmpty = emailEmpty || passwordEmpty
test1 = eitherStringEmpty "A", "B" # expect false
test2 = eitherStringEmpty "", "b" # expect true
test3 = eitherStringEmpty "", "" # expect true
alert "test1: #{test1} test2: #{test2} test3: #{test3}"
Zastanawiam się, czy istnieje lepszy sposób niż not email? or email is ''
. Czy mogę wykonać odpowiednik C # string.IsNullOrEmpty(arg)
w CoffeeScript za pomocą jednego wywołania? Zawsze mógłbym zdefiniować dla niego funkcję (tak jak zrobiłem), ale zastanawiam się, czy jest coś w języku, którego mi brakuje.
coffeescript
jcollum
źródło
źródło
!!
wersji, która jest powszechnym sposobem rzutowania na wartość logiczną. Jeśli ma to znaczenie, jest to prawie na pewno szybsze niż definiowanie funkcji, jak zasugerował Jeremy.Nie jest to całkowicie równoważne, ale
email?.length
będzie prawdziwe tylko wtedy, gdyemail
nie jest zerowe i ma.length
właściwość niezerową . Jeśli ustawisznot
tę wartość, wynik powinien zachowywać się tak, jak chcesz, zarówno dla łańcuchów, jak i tablic.Jeśli
email
jestnull
lub nie ma.length
, toemail?.length
oszacuje donull
, co jest błędem. Jeśli tak,.length
to ta wartość zostanie oszacowana na długość, która będzie błędna, jeśli jest pusta.Twoja funkcja może zostać zaimplementowana jako:
eitherStringEmpty = (email, password) -> not (email?.length and password?.length)
źródło
To przypadek, w którym przydaje się „prawdziwość”. Nie musisz nawet definiować funkcji do tego:
test1 = not (email and password)
Dlaczego to działa?
'0' // true '123abc' // true '' // false null // false undefined // false
źródło
.trim()
tę wartość jako część logiki walidacji. Odpowiedź dotyczy bardziej składni CS.unless email? and email console.log 'email is undefined, null or ""'
Najpierw sprawdź, czy adres e-mail nie jest niezdefiniowany i nie ma wartości null za pomocą operatora egzystencjalnego, a następnie, jeśli wiesz, że istnieje,
and email
część zwróci fałsz tylko wtedy, gdy ciąg wiadomości e-mail jest pusty.źródło
Możesz użyć operacji coffeescript lub =
s = '' s or= null
źródło
Jeśli chcesz sprawdzić, czy zawartość jest ciągiem, a nie wartością null i nie tablicą, użyj prostego typu porównania:
if typeof email isnt "string"
źródło
typeof email isnt "string"
zwraca wartość false dla obu''
i'a'
Oto jsfiddle demonstrujący bardzo łatwy sposób na zrobienie tego.
Po prostu robisz to po prostu javascript:
var email="oranste"; var password="i"; if(!(email && password)){ alert("One or both not set"); } else{ alert("Both set"); }
W coffescript:
email = "oranste" password = "i" unless email and password alert "One or both not set" else alert "Both set"
Mam nadzieję, że to komuś pomoże :)
źródło
Myślę, że znak zapytania to najłatwiejszy sposób na wywołanie funkcji rzeczy, jeśli rzecz istnieje.
na przykład
car = { tires: 4, color: 'blue' }
chcesz uzyskać kolor, ale tylko jeśli samochód istnieje ...
coffeescript:
tłumaczy na javascript:
if (car != null) { car.color; }
nazywa się operatorem egzystencjalnym http://coffeescript.org/documentation/docs/grammar.html#section-63
źródło
Jestem prawie pewien, że odpowiedź @thejh była wystarczająco dobra, aby sprawdzić pusty ciąg, ALE myślę, że często musimy sprawdzać, czy istnieje? a następnie musimy sprawdzić „Czy jest puste? dołącz ciąg, tablicę i obiekt ”
To jest najkrótszy sposób na zrobienie tego przez CoffeeScript.
tmp? and !!tmp and !!Object.keys(tmp).length
Jeśli zachowamy tę kolejność pytań, zostanie to sprawdzone w tej kolejności 1. Czy istnieje? 2. nie jest pusty ciąg? 3. nie jest pusty obiekt?
więc nie było żadnych problemów dla wszystkich zmiennych, nawet jeśli ich nie było.
źródło
Na podstawie tej odpowiedzi dotyczącej sprawdzania, czy zmienna ma
truthy
wartość, czy nie, potrzebujesz tylko jednej linii:result = !email or !password
i możesz spróbować samemu na tej internetowej konsoli Coffeescript
źródło
Zamiast zaakceptowanej odpowiedzi
passwordNotEmpty = !!password
możesz użyćpasswordNotEmpty = if password then true else false
Daje ten sam wynik (różnica tylko w składni).
W pierwszej kolumnie jest wartość, w drugiej wynik
if value
:0 - false 5 - true 'string' - true '' - false [1, 2, 3] - true [] - true true - true false - false null - false undefined - false
źródło