Самый простой способ проверить, является ли строка пустой или пустой
у меня есть этот код, который проверяет пустой или пустой строкой. Это работает в тестировании.
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 ''
. Могу ли я сделать эквивалент C# string.IsNullOrEmpty(arg)
в CoffeeScript с одним вызовом? Я всегда мог бы определить функцию для него (как и я), но мне интересно, есть ли что-то в языке, что мне не хватает.
11 ответов:
это не совсем эквивалент, но
email?.length
будет истина, если.length
собственность. Если выnot
это значение результат должен вести себя так, как вы хотите, как для строк и массивов.если
null
или нет.length
, потомemail?.length
будет оценено какnull
, который является falsey. Если у него есть.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 ""'
сначала проверьте, не является ли электронная почта неопределенной и не нулевой с экзистенциальным оператором, а затем, если вы знаете, что она существует
and email
часть будет возвращать только false, если строка электронной почты пуста.
Если вам нужно проверить, что содержимое является строкой, а не нулем и не массивом, используйте простой тип сравнения:
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
Я уверен, что ответ @thejh был достаточно хорош, чтобы проверить пустую строку, но, Я думаю, что мы часто должны проверять, что " это существует? а потом мы должны проверить, пусто ли оно? включить строку, массив и объект'
Это сокращенный способ для CoffeeScript, чтобы сделать это.
tmp? and !!tmp and !!Object.keys(tmp).length
Если мы сохраним этот порядок вопросов, это будет проверено этим порядком 1. существует ли она? 2. не пустая строка? 3. не пустой объект?
Так что не было никаких проблем все переменные даже в случае не существовало.