Ответ 1
Да:
passwordNotEmpty = not not password
или короче:
passwordNotEmpty = !!password
У меня есть этот код, который проверяет пустую или нулевую строку. Он работает в тестировании.
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}"
Мне интересно, есть ли лучший способ, чем not email? or email is ''
. Могу ли я сделать эквивалент С# string.IsNullOrEmpty(arg)
в CoffeeScript с помощью одного вызова? Я всегда мог определить для него функцию (как и я), но мне интересно, есть ли что-то на том языке, который мне не хватает.
Да:
passwordNotEmpty = not not password
или короче:
passwordNotEmpty = !!password
Это не совсем эквивалентно, но email?.length
будет правдивым, если email
не имеет значения null и имеет ненулевое свойство .length
. Если вы not
это значение, результат должен вести себя так, как вы хотите, для строк и массивов.
Если email
есть null
или не имеет .length
, тогда email?.length
будет оцениваться как null
, что является ложным. Если он имеет .length
, то это значение будет оценивать по его длине, которое будет ложным, если оно пусто.
Ваша функция может быть реализована как:
eitherStringEmpty = (email, password) ->
not (email?.length and password?.length)
Это случай, когда "правность" пригодится. Вам даже не нужно определять функцию для этого:
test1 = not (email and password)
Почему это работает?
'0' // true
'123abc' // true
'' // false
null // false
undefined // false
unless email? and email
console.log 'email is undefined, null or ""'
Сначала проверьте, не является ли адрес электронной почты не undefined, а не null с экзистенциальным оператором, тогда, если вы знаете, что существует, то часть and email
возвращает только false, если строка электронной почты пуста.
Вы можете использовать coffeescript или = операцию
s = ''
s or= null
Если вам нужно проверить, что содержимое является строкой, а не нулем, а не массивом, используйте простой тип сравнения:
if typeof email isnt "string"
Вот jsfiddle, демонстрирующий очень простой способ сделать это.
В основном вы просто это javascript:
var email="oranste";
var password="i";
if(!(email && password)){
alert("One or both not set");
}
else{
alert("Both set");
}
В coffescript:
email = "oranste"
password = "i"
unless email and password
alert "One or both not set"
else
alert "Both set"
Надеюсь, это поможет кому-то:)
Я думаю, что вопросительный знак - это самый простой способ вызвать функцию на вещи, если предмет существует.
например
car = {
tires: 4,
color: 'blue'
}
вы хотите получить цвет, но только в том случае, если автомобиль существует...
CoffeeScript:
car?.color
переводит на javascript:
if (car != null) {
car.color;
}
он называется экзистенциальным оператором http://coffeescript.org/documentation/docs/grammar.html#section-63
Вместо принятого ответа passwordNotEmpty = !!password
вы можете использовать
passwordNotEmpty = if password then true else false
Он дает тот же результат (разница только в синтаксисе).
В первом столбце находится значение, во втором - результат if value
:
0 - false
5 - true
'string' - true
'' - false
[1, 2, 3] - true
[] - true
true - true
false - false
null - false
undefined - false
Основываясь на этом ответе о проверке того, имеет ли переменная значение truthy
или нет, вам просто нужна одна строка:
result = !email or !password
& вы можете попробовать это для себя на этой онлайн-консоли Coffeescript