JavaScriptで空/未定義/ null文字列を確認するにはどうすればよいですか?


2854

私はこの質問を見ましたが、JavaScript固有の例を見ませんでした。string.EmptyJavaScriptで利用できるシンプルなものはありますか、それとも単なるチェックのケース""ですか?


2
参考までに、私はStringクラスの最も有用なAPIはMozillajavascriptキットにあると思います。[elated.com](elated.com/articles/working-with-strings)には、Stringのすべてのプロパティ、メソッドに関するチュートリアルがあります...注:Mozillaリンクがdeveloper.mozilla.org/en/に
Gene T

これをチェックしてください:stackoverflow.com/a/36491147/7026966
Himanshu Shekhar

要件が明確に指定されていれば、非常に役立ちます。isEmptyがtrueを返す値は何ですか?""をチェックすると、値がType文字列で長さが0の場合にのみtrueが返されます。ここでの多くの回答は、一部またはすべての誤った値に対してもtrueを返す必要があると想定しています。
RobG、

回答:


3571

値があるかどうかを確認したいだけの場合は、

if (strValue) {
    //do something
}

nullに対して空の文字列を具体的にチェックする必要がある場合""===演算子を使用しチェックするのが最善の策だと思います(実際には、比較対象の文字列であることを確認するため)。

if (strValue === "") {
    //...
}

174
インタプリタは文字列リテラルからStringオブジェクトを作成する必要がないため、長さプロパティのテストは、実際には文字列を ""に対してテストするよりも高速です。
ヴィンセントロバート

26
テスト、Chromeデベロッパーツールでは、いくつかのナイーブプロファイリングをやっ@Vincent === ''.length任意の識別可能な改善を示さなかった(と使用して.length、あなたが文字列を持っていると仮定することができます動作する場合のみ)
bdukes

26
@bdukesあなたがその種のマイクロ最適化に関心を持ち始めたとき、私はChromeがパフォーマンスの問題のほとんどを抱えているブラウザーではないと思います...
Vincent Robert

15
ただし、「空の文字列」の定義に空白が含まれている場合、このソリューションは適切ではありません。1つ以上のスペースの文字列は、上記でtrueを返します。あなたはjQueryのを使用している場合は、単純にこれを使用することができます。if($ .trim(REF).LENGTH === 0) -同様の質問への答えは、このあたりのように:stackoverflow.com/questions/2031085/...
CodeClimber

115
予想どおり.length > 0、実際には文字列リテラルと比較するよりはるかに高速です。このjsPerfを
Chad

1128

文字列が空、null、または未定義であるかどうかを確認するために、私は次のように使用します。

function isEmpty(str) {
    return (!str || 0 === str.length);
}

文字列が空白、null、または未定義であるかどうかを確認するには、次のように使用します。

function isBlank(str) {
    return (!str || /^\s*$/.test(str));
}

文字列が空白か、空白のみが含まれているかを確認するには:

String.prototype.isEmpty = function() {
    return (this.length === 0 || !this.trim());
};

21
なぜstr = length === 0ではなく0 === str.lengthですか?
Vincent

66
@Vincent条件はこのように記述されることが多くif (variable == constant value)、 '='を忘れた場合は、テストする代わりに定数値を変数に割り当てます。ifで変数を割り当てることができるため、コードは引き続き機能します。したがって、この条件を記述するより安全な方法は、定数値と変数を逆にすることです。この方法でコードをテストすると、エラーが表示されます(割り当ての無効な左辺)。JSHintなどを使用して、条件での割り当てを禁止し、作成時に警告することもできます。
2013

2
/^\s*$/.test(str)本当に読みにくいのは残念です-おそらくより単純なコードまたは正規表現を使用してスペースを削除する方が良いでしょうか?stackoverflow.com/questions/6623231/…を参照してください。また、stackoverflow.com
Adrien Be

6
/^\s*$/.test(str)はstr.trim()。length === 0に置き換えることができます
Schadenfreude

21
@Vincentは、「ヨーダ条件」とも呼ばれif blue is the skyます。dodgycoder.net/2011/11/yoda-conditions-pokemon-exception.html
AZを

316

以前のすべての答えは良いですが、これはさらに良いでしょう。!!not not)演算子を使用します。

if(!!str){
    // Some code here
}

または型キャストを使用します:

if(Boolean(str)){
    // Code here
}

どちらも同じ機能を果たします。変数をブール値に型キャストしますstr。ここで、は変数です。
それは返すfalseためにnull,undefined,0,000,"",false。文字列「0」と空白「」に対して
返さtrueれます。


61
なぜこれが「さらに良い」のですか?
Mene

33
との動作に違いはif(str)ありif(!!str)ますか?
Peter Olson

6
@PeterOlson複数の文字列のコンテンツをチェックするブール値として変数を保存しようとしている場合は、これを実行する必要があります。var any = (!!str1 && !!str2 && !!str3)そこに数値がある場合の処理
John Ruddell

23
これは私がいつも使っている解決策です。!!str.trim()文字列が空白のみで構成されていないことを確認します。
Dario Oddenino、2016

5
ハックのようには見えませんBoolean(str)が、はるかに読みやすく、「wtfish」が少なくなっています。
しんぞう2016年

105

あなたが得ることができる最も近いものはstr.Empty(strが文字列であることを前提条件として)です:

if (!str.length) { ...

9
strがnullの場合、例外がスローされませんか?
Pic Mickael

3
@PicMickaelはい!そうだろうstr.Empty
Ates Goral 2018

99

文字列が単なる一連の空のスペースではないことを確認する必要がある場合(これはフォームの検証用であると想定しています)、スペースを置き換える必要があります。

if(str.replace(/\s/g,"") == ""){
}

8
しかし、実際にテストしたいものがスペース以外のコンテンツを含む文字列である場合は、うまくいきます。これをテストする安価な方法はありますか?
フラッシュ

4
長さプロパティはどうですか?
driAn 2010

27
すべてのスペースを削除する代わりに、非スペースがあるかどうかを確認してみませんか?スペース以外の文字がある場合に早期に救済できるという2つの利点があり、チェックする新しい文字列が返されません。if(str.match(/\S/g)){}
mpen 2011年

34
@Mark FYI、スペース以外の文字の最初の出現の一致は文字列が空でないことを意味するため、グローバル修飾子は必要ありません:str.match(/\S/)
neezer

1
なぜそれが高いのですか?本当にそうなら、なぜjQueryはこの方法を使用するのですか?あなたはjQueryのソースでこれを見つけることができますvar trimLeft = /^\s+/, trimRight = /\s+$/;
Marecky

66

私が使う:

function empty(e) {
  switch (e) {
    case "":
    case 0:
    case "0":
    case null:
    case false:
    case typeof(e) == "undefined":
      return true;
    default:
      return false;
  }
}

empty(null) // true
empty(0) // true
empty(7) // false
empty("") // true
empty((function() {
    return ""
})) // false

5
このソリューションは、言語に依存しません。依存する唯一のJavaScript機能はtypeofです。したがって、さまざまなブラウザーでの実装を信頼せず、より良いソリューションを入手する時間がない場合に使用できるソリューションの良い例です。(IE、インターネットアクセスなし)。それは証明のようなものです。最もクリーンではありませんが、JavaScriptについてあまり知らなくても動作することを確認できます。
ジェフデイビス

2
さらに少し進めて、未定義の場合は===演算子でそれを打ちます。そうでなければ、それは単に完璧な答えです。
xarlymg89 2018年

typeof中にはswitch私のために動作しませんでした。私はif (typeof e == "undefined")テストを追加し、それは動作します。どうして?
Lucas

1
@Lucasこれはタイプミスまたは見落としでした。あなたの修正は正しいアプローチです。(オリジナルは、関数がチェックすることになっているeパラメーターではなく、空の関数のコンテキストを指します)
beeThree

case undefined:代わりに使用できcase typeof(e) == "undefined":ますか?
ボリスJ.

43

lodash:_.isEmpty(value)を使用できます。

それはのような例多くをカバーし{}''nullundefinedなど、

しかし、JavaScriptプリミティブデータ型の場合、またはその両方が常に返さtrueれます。Number_.isEmpty(10)_.isEmpty(Number.MAX_VALUE)true


_.isEmpty(" "); // => false
エーリヒ

1
@Erich " "は空ではないため。_.isEmpty("");trueを返します。
Moshii

1
かなり当てはまります-ここでの他のいくつかの回答はフォームの検証と文字列が空白のみで構成されているかどうかのチェックを意味するため、これを述べました。この単一のlodash関数自体はその問題を解決しません。
エーリヒ

@Erich、今私はあなたの要点を得ました、言及してくれてありがとう。
Moshii

36

関数:

function is_empty(x)
{
    return (
        (typeof x == 'undefined')
                    ||
        (x == null)
                    ||
        (x == false)  //same as: !x
                    ||
        (x.length == 0)
                    ||
        (x == "")
                    ||
        (x.replace(/\s/g,"") == "")
                    ||
        (!/[^\s]/.test(x))
                    ||
        (/^\s*$/.test(x))
    );
}

PS:JavaScriptでは、後に改行を使用しないでくださいreturn


1
各チェックが何をしているか説明できますか?:)
DanV 2014年

2
-1彼らはさまざまなことをテストしています。これらすべてを1つのifステートメントにまとめても意味がありません。
Bennett McElwee 14

1
typeof MyVariable == 'undefined'は、変数が最初に宣言されてnullに初期化されない限り、未定義の値を持つ初期化された変数と宣言されていない変数を区別しません。lengthプロパティをチェックすると、文字列プリミティブが文字列オブジェクトにラップされます。
Scott Marcus

35

試してください:

if (str && str.trim().length) {  
    //...
}

2
長さのプロパティは必要ですか?
frogcoder

str.trim().lengthstr.trim()私自身のテスト結果によると、よりも速く、約1%です。
devildelta

2
@devildelta-1%はテストのエラーです。
スティーブンMアービング

OPは空の文字列、未定義、またはnullをテストしようとしています。これは、これらの条件のいずれでもない文字列のテストです。彼は空白のみの文字列についても何も言わなかった。:あなたは、限り、あなたはタイプが変数に格納されていることを確認なし、他のデータであるとして、これだけでOPの条件をテストすることができます if (!str) { ... }
スティーブン・Mアーヴィング

34
var s; // undefined
var s = ""; // ""
s.length // 0

JavaScriptでは空の文字列を表すものは何もありません。length(varが常に文字列であることがわかっている場合)またはに対してチェックを行います""


29

最も効率的な方法についてはあまり心配しません。あなたの意図に最も明確なものを使用してください。私にとってそれは通常strVar == ""です。

Constantinからのコメントのとおり、strVarが整数0の値を含む可能性がある場合、それは実際に意図を明確にする状況の1つになります。


11
悪いアイデア。strVarが誤って0に割り当てられている場合は、真取得します
コンスタンティン

5
あなたの意図を明確にすることは、他の方法がもたらす可能性のあるミクロ最適化よりも重要であることに同意しますが、厳密な比較演算子 を使用する===方が良いでしょう。strVarが空の文字列の場合にのみtrueを返します。
役に立たないコード

未定義の場合、チェックは失敗します。したがって、if(str)の方が優れている
Valentin Heinitz、2015

3
@ValentinHeinitz(strに0または "0"の誤った値が割り当てられた場合、if(str)は誤ってtrueを報告します。最善の方法はif(str === "")です。シンプルで失敗することはありません。
Scott Marcus


20

たくさんの答え、そしてたくさんの異なる可能性!

迅速かつ簡単な実装で間違いなく勝者は次のとおりです。 if (!str.length) {...}

ただし、他の多くの例が利用可能です。これに対処するための最良の機能的方法は、次のように提案します。

function empty(str)
{
    if (typeof str == 'undefined' || !str || str.length === 0 || str === "" || !/[^\s]/.test(str) || /^\s*$/.test(str) || str.replace(/\s/g,"") === "")
    {
        return true;
    }
    else
    {
        return false;
    }
}

少し過剰だと思います。


2
未定義のチェックは、チェックの最初に移動する必要があります。そうしないと、未定義のアイテムが以前のチェックで例外をスローします。
SvdSinner 2016年

完全に同意します!ナイスキャッチ。上記の回答を編集します!
tfont 2016年

str.length === 0仮パラメータを持たない関数に対してはtrueを返します。
RobG、

20

正規表現を使うこともできます:

if((/^\s*$/).test(str)) { }

空または空白で埋められた文字列をチェックします。


それは機能しますが、運用面でも恐ろしく高価です。大規模なセットではなく、1つまたは2つのことを確認する場合に適しています。
Orpheus

20

パフォーマンス

選択した18のソリューションに対してmacOS v10.13.6(High Sierra)でテストを実行します。ソリューションは、以下のスニペットに示されているように(コーナーケースの入力データの場合)少し異なります。

結論

  • シンプルなソリューションに基づいて!str=====およびlengthすべてのブラウザ(A、B、C、G、I、J)のために高速であります
  • 正規表現に基づくソリューション(testreplace)でありcharAt、すべてのブラウザー(H、L、M、P)で最も遅い
  • 最速とマークされたソリューションは、1回のテスト実行でのみ最速でした-しかし、多くの実行では、「高速」ソリューショングループ内で変化します

ここに画像の説明を入力してください

詳細

以下のスニペットでは、さまざまな入力パラメーターを使用して、選択した18のメソッドの結果を比較しています

  • "" "a" " "-空の文字列、文字付きの文字列とスペース付きの文字列
  • [] {} f-配列、オブジェクト、関数
  • 0 1 NaN Infinity -数字
  • true false -ブール
  • null undefined

テストされたすべてのメソッドがすべての入力ケースをサポートするわけではありません。

そして、すべての方法についてstr = ""、ブラウザーChrome v78.0.0、Safari v13.0.4、Firefox v71.0.0の速度テストケースを実行します- ここでマシンのテストを実行できます

ここに画像の説明を入力してください


これは本当に素晴らしいです!このすべてのレイアウトを見るのが大好きです!ありがとうございました!
WebWanderer

それは徹底的な研究です-感謝
Deian

19
  1. var a;存在することを確認してください
  2. false spaces値をトリムしてから、テストしますemptiness

    if ((a)&&(a.trim()!=''))
    {
      // if variable a is not empty do this 
    }

17

また、空白で満たされた文字列を「空」と見なす場合。

次の正規表現でテストできます。

!/\S/.test(string); // Returns true if blank.

14

普段はこんな感じで

if (!str.length) {
    // Do something
}

3
変数が文字列であることがわかっている場合は、最速です。変数が未定義の場合、エラーをスローします。
Adrian Hope-Bailie

@ AdrianHope-Bailieなぜ未定義の変数をテストするのですか?
アビマエルマーテル2014

2
@AbimaelMartellどうして?宣言した変数、またはメソッドやAPI呼び出しからの応答など、制御できないスコープから渡された変数があります。値が含まれていると想定して上記のチェックを使用できますが、定義されていないかnullの場合はエラーが発生します。var test = null; if(!test.length){alert( "adrian is wrong");}
Adrian Hope-Bailie

OPは「空の文字列を確認する方法」を求めていましたが、未定義の変数は空の文字列ではありません。とにかく、typeof variable != "undefined"空かどうかを確認する前に確認できます。
アビマエルマーテル2014

10

文字列にnull文字が含まれる可能性を考慮した回答に気づきませんでした。たとえば、null文字列がある場合:

var y = "\0"; // an empty string, but has a null character
(y === "") // false, testing against an empty string does not work
(y.length === 0) // false
(y) // true, this is also not expected
(y.match(/^[\s]*$/)) // false, again not wanted

nullをテストするには、次のようにします。

String.prototype.isNull = function(){ 
  return Boolean(this.match(/^[\0]*$/)); 
}
...
"\0".isNull() // true

null文字列と空の文字列で機能し、すべての文字列でアクセスできます。さらに、他のJavaScriptの空文字または空白文字(つまり、改行なしスペース、バイトオーダーマーク、行/段落区切り文字など)を含むように拡張できます。


2
興味深い分析。これは99.9%のケースでは関係ないと思います。しかし最近、MySQLは列にnull文字( "\ 0")が含まれている場合(かつその場合に限り)、列を "null"と評価することを発見しました。一方、Oracleは「\ 0」をnullとして評価せず、長さ1の文字列(1文字がnull文字)として扱うことを優先します。多くのWeb開発者はバックエンドデータベースを使用しており、異なるタイプの「null」値を通過する可能性があるため、これは適切に処理されないと混乱を引き起こす可能性があります。それはすべての開発者の心の奥にあるはずです。
cartbeforehorse 2012年

10

一方、null、undefined、 ''、 ''、{}、[]などのすべての「空」をチェックする1つの関数を使用できます。だから私はこれを書いた。

var isEmpty = function(data) {
    if(typeof(data) === 'object'){
        if(JSON.stringify(data) === '{}' || JSON.stringify(data) === '[]'){
            return true;
        }else if(!data){
            return true;
        }
        return false;
    }else if(typeof(data) === 'string'){
        if(!data.trim()){
            return true;
        }
        return false;
    }else if(typeof(data) === 'undefined'){
        return true;
    }else{
        return false;
    }
}

ユースケースと結果。

console.log(isEmpty()); // true
console.log(isEmpty(null)); // true
console.log(isEmpty('')); // true
console.log(isEmpty('  ')); // true
console.log(isEmpty(undefined)); // true
console.log(isEmpty({})); // true
console.log(isEmpty([])); // true
console.log(isEmpty(0)); // false
console.log(isEmpty('Hey')); // false

10

現在のところ、文字列が空かどうかを確認するためのstring.emptyのような直接的なメソッドはありません。ただし、コードでは、次のような空の文字列のラッパーチェックを使用できます。

// considering the variable in which your string is saved is named str.

if (str && str.length>0) { 

  // Your code here which you want to run if the string is not empty.

}

これを使用して、文字列が未定義またはnullでないことも確認できます。未定義、null、空の3つは異なることを覚えておいてください。


nullまたは未定義の変数に対して操作を直接行うべきではないため、nullまたは未定義の原因でエラーがスローされます。他の回答で述べられているように、これを行う前にstrが存在するかどうかを確認してください。これはlet abcでも機能することに注意してください。 = ''ですが、let abc = ''では、これら2つは異なります。
whoami

を検討してlet rand = ()=>Math.random()からrand && rand.length > 0)false を返しますが、明らかにfnは「空」ではありません。つまり、フォーマットパラメータのない関数に対してはfalseを返します。
RobG、

@RobG Math.random()は文字列ではなく数値を返します。そして、この答えは弦についてです。;-)
Harshit Agarwal

10

これらの答えはすべていいです。

しかし、変数が文字列であり、スペースだけが含まれているわけではなく(これは私にとって重要です)、 '0'(文字列)が含まれている可能性があります。

私のバージョン:

function empty(str){
    return !str || !/[^\s]+/.test(str);
}

empty(null); // true
empty(0); // true
empty(7); // false
empty(""); // true
empty("0"); // false
empty("  "); // true

jsfiddleのサンプル。


1
えっ?場合は、文字列を期待している、empty(0)empty(7)同じ値を返す必要があります。
Bennett McElwee 14

私の特定のケースでは- empty("0")返さなければならないfalse(それはない、空の文字列であるため)が、empty(0)返す必要がありtrue、それは:)空のため
Andron

しかし、0 空ではありません!それは数字であり、数字をいっぱいにすることも空にすることもできません。もちろん、これは関数なので、要件を満たす必要がありますがempty、この場合は誤解を招く名前になります。
Bennett McElwee 14

名前emptyはいいと思います。空の関数のPHPドキュメント:この関数とReturns FALSE if var exists and has a non-empty, non-zero value. Otherwise returns TRUE.の違いPHP-その文字列'0'は空として識別されません。
Andron、2014

私が言うように、それはあなたの機能です:あなたが望むものを呼び出します。しかし、これemptyは不正確で誤解を招く名前です。PHPにも貧弱な名前のempty関数があることは興味深いですが、PHPの障害はJavaScriptとは何の関係もありません。
Bennett McElwee 14

10

ここで良い答えが見つかりませんでした(少なくとも私に適した答えではありません)

だから私は自分自身に答えることに決めました:

value === undefined || value === null || value === "";

定義されていないかどうかを確認する必要があります。そうしないと、メソッドが爆発し、nullと等しいか空の文字列と等しいかどうかを確認できます。

持てない!! またはif(value)、チェック0した場合にのみ、誤った答えが返されます(0は偽)。

そうは言っても、次のような方法でまとめてください。

public static isEmpty(value: any): boolean { return value === undefined || value === null || value === ""; }

PS .: typeofをチェックする必要はありません。メソッドに入る前でも爆発してスローされるからです。


おそらく、未定義の値とnull値(および0、-0、false、NaN)をfalseとして処理するBoolean(value)構文をより適切に使用します。stackoverflow.com/questions/856324/…を
Zhuravlev A.

9

空の文字列だけでなく空の文字列も検出する必要がある場合は、Goralの答えに追加します。

function isEmpty(s){
    return !s.length;    
}

function isBlank(s){
    return isEmpty(s.trim());    
}

8

これを試して

str.value.length == 0

3
"".value.lengthエラーが発生します。それはする必要がありますstr.length === 0
AndFisher

これは、TypeErrorIf strが等しいundefinedか、またはnull
RousseauAlexandreが

8

JavaScriptのネイティブのStringオブジェクトに簡単に追加して、繰り返し再利用する ことができます... 空の文字列をチェックしたい場合は、以下のコードのような簡単なもので十分です。
''

String.prototype.isEmpty = String.prototype.isEmpty || function() {
  return !(!!this.length);
}

そうでない場合、''空の文字列と' 'スペース付きの両方をチェックしたい場合は、trim()以下のコードのように、を追加するだけでそれを行うことができます。

String.prototype.isEmpty = String.prototype.isEmpty || function() {
   return !(!!this.trim().length);
}

このように呼び出すことができます:

''.isEmpty(); //return true
'alireza'.isEmpty(); //return false

!(!!this.length)単に!this(または!this.trim()2番目のオプション)ではなく、実行することにはどのような利点がありますか?長さ0の文字列は既に誤りであり、括弧は冗長であり、3回否定することは1回否定することとまったく同じです。
ジョンモンゴメリー

8

これを試して:

export const isEmpty = string => (!string || !string.length);

8

文字列でも空でもヌルでもない値をテスター関数に渡した場合にどうなるかについて、いくつかの調査を行いました。多くの人が知っているように、(0 == "")はJavaScriptではtrueですが、0は値であり、空でもnullでもないので、テストすることをお勧めします。

次の2つの関数は、未定義、null、空/空白の値に対してのみtrueを返し、数値、ブール値、オブジェクト、式など、その他すべてに対してfalseを返します。

function IsNullOrEmpty(value)
{
    return (value == null || value === "");
}
function IsNullOrWhiteSpace(value)
{
    return (value == null || !/\S/.test(value));
}

より複雑な例が存在しますが、これらは単純で一貫した結果を提供します。(value == null)チェックに含まれているため、未定義をテストする必要はありません。次のようにStringに追加することで、C#の動作を模倣することもできます。

String.IsNullOrEmpty = function (value) { ... }

Stringクラスのインスタンスがnullの場合はエラーになるため、これをStringsプロトタイプに含めたくありません。

String.prototype.IsNullOrEmpty = function (value) { ... }
var myvar = null;
if (1 == 2) { myvar = "OK"; } // Could be set
myvar.IsNullOrEmpty(); // Throws error

次の値の配列でテストしました。疑わしい場合は、ループして関数をテストできます。

// Helper items
var MyClass = function (b) { this.a = "Hello World!"; this.b = b; };
MyClass.prototype.hello = function () { if (this.b == null) { alert(this.a); } else { alert(this.b); } };
var z;
var arr = [
// 0: Explanation for printing, 1: actual value
    ['undefined', undefined],
    ['(var) z', z],
    ['null', null],
    ['empty', ''],
    ['space', ' '],
    ['tab', '\t'],
    ['newline', '\n'],
    ['carriage return', '\r'],
    ['"\\r\\n"', '\r\n'],
    ['"\\n\\r"', '\n\r'],
    ['" \\t \\n "', ' \t \n '],
    ['" txt \\t test \\n"', ' txt \t test \n'],
    ['"txt"', "txt"],
    ['"undefined"', 'undefined'],
    ['"null"', 'null'],
    ['"0"', '0'],
    ['"1"', '1'],
    ['"1.5"', '1.5'],
    ['"1,5"', '1,5'], // Valid number in some locales, not in JavaScript
    ['comma', ','],
    ['dot', '.'],
    ['".5"', '.5'],
    ['0', 0],
    ['0.0', 0.0],
    ['1', 1],
    ['1.5', 1.5],
    ['NaN', NaN],
    ['/\S/', /\S/],
    ['true', true],
    ['false', false],
    ['function, returns true', function () { return true; } ],
    ['function, returns false', function () { return false; } ],
    ['function, returns null', function () { return null; } ],
    ['function, returns string', function () { return "test"; } ],
    ['function, returns undefined', function () { } ],
    ['MyClass', MyClass],
    ['new MyClass', new MyClass()],
    ['empty object', {}],
    ['non-empty object', { a: "a", match: "bogus", test: "bogus"}],
    ['object with toString: string', { a: "a", match: "bogus", test: "bogus", toString: function () { return "test"; } }],
    ['object with toString: null', { a: "a", match: "bogus", test: "bogus", toString: function () { return null; } }]
];

==の使用をやめて、===を使用すると、if(s === "")の問題が解決します。
Scott Marcus

8

それが正確に空の文字列かどうかを確認するには:

if(val==="")...

それが空の文字列であるか、または値なし(null、undefined、0、NaN、falseなど)の論理的同等物であるかどうかを確認するには:

if(!val)...

7

isEmpty()メソッドはありません。タイプと長さを確認する必要があります。

if (typeof test === 'string' && test.length === 0){
  ...

型チェックは、testis undefinedまたはの実行時エラーを回避するために必要ですnull


7

空白文字列を無視して、これを使用してnull、空、未定義をチェックできます。

var obj = {};
(!!obj.str) // Returns false

obj.str = "";
(!!obj.str) // Returns false

obj.str = null;
(!!obj.str) // Returns false

簡潔であり、未定義のプロパティに対して機能しますが、最も読みやすくはありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.