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


87

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

回答:


118

うん:

passwordNotEmpty = not not password

以下:

passwordNotEmpty = !!password

1
これは、2つの答えのうちの「javascript-y」です。特に!!バージョンを使用する場合、これは基本的にブール値にキャストする一般的な方法です。それが重要な場合、これはジェレミーが提案したように関数を定義するよりもほぼ確実に高速です。
アーロンデュフォー

それらはすべて機能しますが、これは最も高い票を得ました。私は読みやすさのためにstackoverflow.com/q/8127920/30946が好きです。
jcollum

3
すべてのスペースを含む文字列では失敗します...空白では機能しません
Arkhitech '28 / 02/14

1
@Arkhitechブランクは空と同じではないため、機能します。
jcollum 2014

2
読みやすさの私の好みにはあまりにも「賢い」。私はそれを使うつもりはないと思いますが、それでも良い仕事です
PandaWood 2014年

37

これは完全に同等ではありませんが、がnullでなく、ゼロ以外のプロパティを持つemail?.length場合にのみ真実になります。あなたならば、あなたは文字列と配列の両方のためにしたいと、この値は、結果が振る舞うべき。email.lengthnot

emailがあるnullか、ない場合.length、はemail?.lengthに評価されますがnull、これは誤っています。aがある場合.length、この値はその長さに評価され、空の場合は偽になります。

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

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

1
@pyrotechnickこの質問では、配列と文字列の区別については質問されませんでした。Null値と空の文字列を空でない文字列と区別することについて尋ねました。私のポイントは、コードはnull値と空の配列を空でない配列と区別することもできるということでしたが、それは問題の範囲を超えていました。
Black Lives Matter、2012年

それでも、「whichStringEmpty」は指定したメソッドの名前としては正しくありません。
パイロ

14

「真実」が重宝するケースです。そのための関数を定義する必要すらありません。

test1 = not (email and password)

なぜ機能するのですか?

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

1
.trim()検証ロジックの一部として値をすでに呼び出していると思います。答えは、CS構文についてです。
Ricardo Tomasi

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

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



1

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

 if typeof email isnt "string"

typeof email isnt "string"両方についてfalseを返す'''a'
jcollum

1

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

クエスチョンマークは、Thingが存在する場合、Thingで関数を呼び出す最も簡単な方法だと思います。

例えば

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

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

coffeescript:

 car?.color

javascriptに変換します。

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

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


空の文字列は、存在チェックに対してtrueを返します。
jcollum 2014年

1

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

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

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

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

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



0

受け入れられた回答の代わりに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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.