web-dev-qa-db-ja.com

文字列がnullまたは空かどうかを確認する最も簡単な方法

空の文字列またはnull文字列をチェックするこのコードがあります。テスト中です。

_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 ''_よりも良い方法があるかどうかです。 CoffeeScriptでC#string.IsNullOrEmpty(arg)に相当することを1回の呼び出しで実行できますか?私はいつでも関数を定義できました(私がしたように)が、言語に何か欠けているものがあるかどうか疑問に思っています。

82
jcollum

うん:

passwordNotEmpty = not not password

以下:

passwordNotEmpty = !!password
114
thejh

完全に同等というわけではありませんが、email?.lengthは、emailがnullでなく、ゼロ以外の.lengthプロパティを持つ場合にのみ真理になります。この値をnotした場合、結果は文字列と配列の両方に対して希望どおりに動作するはずです。

emailnullであるか、.lengthを持たない場合、email?.lengthnullと評価されますが、これは偽です。 .lengthがある場合、この値はその長さに評価され、空の場合は偽になります。

関数は次のように実装できます。

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

これは、「真実」が重宝するケースです。そのための関数を定義する必要さえありません:

test1 = not (email and password)

なぜ機能するのですか?

'0'       // true
'123abc'  // true
''        // false
null      // false
undefined // false
14
Ricardo Tomasi
unless email? and email
  console.log 'email is undefined, null or ""'

まず、電子メールが未定義ではなく、存在演算子を使用してnullでないことを確認してから、存在することがわかっている場合はand email partは、電子メール文字列が空の場合にのみfalseを返します。

4
cutemachine

Coffeescript or =操作を使用できます

s = ''    
s or= null
2
Duane Fields

コンテンツがnullではなく配列でもない文字列であることを確認する必要がある場合は、単純なtypeof比較を使用します。

 if typeof email isnt "string"
1
Kevin Lamping

疑問符は、モノが存在する場合にそのモノの関数を呼び出す最も簡単な方法だと思います。

例えば

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

あなたは色を取得したいが、車が存在する場合にのみ...

coffeescript:

 car?.color

javascriptに変換します:

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

存在演算子と呼ばれます http://coffeescript.org/documentation/docs/grammar.html#section-6

1
Blair Anderson

これは非常に簡単な方法を示す 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"

これが誰かを助けることを願っています:)

1
Automatico

@thejhの答えは空の文字列をチェックするのに十分であったと確信していますが、「存在するか?」を頻繁にチェックする必要があると思いますそして、「空ですか?」をチェックする必要があります文字列、配列、オブジェクトを含む '

これは、CoffeeScriptがこれを行うための短縮方法です。

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

この質問の順序を保持すると、この順序で確認されます1.存在しますか? 2.空の文字列ではない? 3.空のオブジェクトではない?

そのため、存在しない場合でも、すべての変数に問題はありませんでした。

0
jwjin

この回答 変数にtruthy値があるかどうかの確認に基づいて、1行だけが必要です。

result = !email or !password

&あなたはこれであなた自身のためにそれを試すことができます online Coffeescript console

0
AbdelHady

受け入れられる回答の代わりにpasswordNotEmpty = !!passwordを使用できます

passwordNotEmpty = if password then true else false

同じ結果が得られます(構文のみが異なります)。

最初の列は値、2番目の列はif valueの結果です:

0 - false
5 - true
'string' - true
'' - false
[1, 2, 3] - true
[] - true
true - true
false - false
null - false
undefined - false
0
Evmorov