У меня есть этот код, который проверяет пустую или нулевую строку. Он работает в тестировании.
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 с помощью одного вызова? Я всегда мог определить для него функцию (как и я), но мне интересно, есть ли в языке что-то, чего мне не хватает.
coffeescript
Jcollum
источник
источник
!!
версию, которая является обычным способом преобразования в логическое значение. Если это важно, это почти наверняка быстрее, чем определение функции, как предлагал Джереми.Это не полностью эквивалентно, но
email?.length
будет правдивым, только если неemail
равно нулю и имеет ненулевое.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
источник
.trim()
значение как часть своей логики проверки. Ответ больше о синтаксисе CS.unless email? and email console.log 'email is undefined, null or ""'
Сначала проверьте, не является ли адрес электронной почты неопределенным и пустым с помощью экзистенциального оператора, тогда, если вы знаете, что он существует,
and email
часть вернет только false, если строка электронной почты пуста.источник
Вы можете использовать coffeescript или операцию =
s = '' s or= null
источник
Если вам нужно проверить, что содержимое является строкой, а не нулем и массивом, используйте простой тип сравнения:
if typeof email isnt "string"
источник
typeof email isnt "string"
возвращает false для обоих''
и'a'
Вот 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:
переводится на javascript:
if (car != null) { car.color; }
он называется экзистенциальным оператором http://coffeescript.org/documentation/docs/grammar.html#section-63
источник
Я почти уверен, что ответ @thejh был достаточно хорош, чтобы проверить пустую строку, НО, я думаю, что нам часто нужно проверять, существует ли это? а затем нам нужно проверить, пусто ли оно? включить строку, массив и объект '
Это самый короткий способ для CoffeeScript сделать это.
tmp? and !!tmp and !!Object.keys(tmp).length
Если мы сохраним этот порядок вопросов, это будет проверяться в этом порядке 1. Существует ли он? 2. не пустая строка? 3. не пустой объект?
поэтому не было никаких проблем для всех переменных, даже если они не существовали.
источник
Основываясь на этом ответе о проверке, имеет ли переменная
truthy
значение или нет, вам просто нужна одна строка:result = !email or !password
и вы можете попробовать это на этой онлайн-консоли Coffeescript
источник
Вместо принятого ответа
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
источник