Самый простой способ проверить, является ли строка пустой или пустой


у меня есть этот код, который проверяет пустой или пустой строкой. Это работает в тестировании.

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 81

11 ответов:

Юп:

passwordNotEmpty = not not password

или короче:

passwordNotEmpty = !!password

это не совсем эквивалент, но email?.length будет истина, если email не-null и имеет ненулевое .length собственность. Если вы not это значение результат должен вести себя так, как вы хотите, как для строк и массивов.

если email и 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, если строка электронной почты пуста.

вы можете использовать coffeescript или = operation

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

Я уверен, что ответ @thejh был достаточно хорош, чтобы проверить пустую строку, но, Я думаю, что мы часто должны проверять, что " это существует? а потом мы должны проверить, пусто ли оно? включить строку, массив и объект'

Это сокращенный способ для CoffeeScript, чтобы сделать это.

tmp? and !!tmp and !!Object.keys(tmp).length

Если мы сохраним этот порядок вопросов, это будет проверено этим порядком 1. существует ли она? 2. не пустая строка? 3. не пустой объект?

Так что не было никаких проблем все переменные даже в случае не существовало.