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

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

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 с помощью одного вызова? Я всегда мог определить для него функцию (как и я), но мне интересно, есть ли что-то на том языке, который мне не хватает.

Ответ 1

Да:

passwordNotEmpty = not not password

или короче:

passwordNotEmpty = !!password

Ответ 2

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

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

Ваша функция может быть реализована как:

eitherStringEmpty = (email, password) ->
  not (email?.length and password?.length)

Ответ 3

Это случай, когда "правность" пригодится. Вам даже не нужно определять функцию для этого:

test1 = not (email and password)

Почему это работает?

'0'       // true
'123abc'  // true
''        // false
null      // false
undefined // false

Ответ 4

unless email? and email
  console.log 'email is undefined, null or ""'

Сначала проверьте, не является ли адрес электронной почты не undefined, а не null с экзистенциальным оператором, тогда, если вы знаете, что существует, то часть and email возвращает только false, если строка электронной почты пуста.

Ответ 5

Вы можете использовать coffeescript или = операцию

s = ''    
s or= null

Ответ 6

Если вам нужно проверить, что содержимое является строкой, а не нулем, а не массивом, используйте простой тип сравнения:

 if typeof email isnt "string"

Ответ 7

Вот 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"

Надеюсь, это поможет кому-то:)

Ответ 8

Я думаю, что вопросительный знак - это самый простой способ вызвать функцию на вещи, если предмет существует.

например

car = {
  tires: 4,
  color: 'blue' 
}

вы хотите получить цвет, но только в том случае, если автомобиль существует...

CoffeeScript:

 car?.color

переводит на javascript:

if (car != null) {
  car.color;
}

он называется экзистенциальным оператором http://coffeescript.org/documentation/docs/grammar.html#section-63

Ответ 9

Вместо принятого ответа 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

Ответ 10

Основываясь на этом ответе о проверке того, имеет ли переменная значение truthy или нет, вам просто нужна одна строка:

result = !email or !password

& вы можете попробовать это для себя на этой онлайн-консоли Coffeescript