JavascriptでisEmptyをチェックしていますか?


83

Javascriptで変数が空かどうかを確認するにはどうすればよいですか?ばかげた質問で申し訳ありませんが、私はJavascriptの初心者です!

if(response.photo) is empty {
    do something
else {
    do something else
}

response.photoJSONからのものであり、空のデータセルである場合もあります。空かどうか確認したい。


2
ここで「空」とはどういう意味ですか?よくわからない場合は、コードを見せてください。
thejh 2011年

1
まだ初期化されていないということですか?
Franz Payer 2011年

1
それが評価されるfalseかどうかということですか?
Felix Kling 2011年

2
空の文字列かどうかということですか?
マークバイアーズ2011年

これは、より読みやすい方法でPHPのsempty()関数のJavaScript実装です。stackoverflow.com/a/33319704/3779853
phil294 2017年

回答:


131

空の文字列をテストする場合:

if(myVar === ''){ // do stuff };

宣言されているが定義されていない変数をチェックする場合:

if(myVar === null){ // do stuff };

定義されていない可能性のある変数をチェックしている場合:

if(myVar === undefined){ // do stuff };

両方をチェックしている場合、つまり、変数がnullまたは未定義の場合:

if(myVar == null){ // do stuff };

4
undefined「定数」はまったく定数ではないため、使用しないでください。typeof myVar === 'undefined'代わりに使用してください。
グッファ2011年

3
いいえ。変数が宣言されているが定義されていない場合、それはnullではありません...それは未定義です。宣言されていない変数をチェックすると、ランタイムエラーが発生します。また、var undefined = 1;3番目の例を破ります。常に使用typeofして確認してください"undefined"
gilly3 2011年

@Jhon Woodwrick:それが最初のケース、空の文字列になります。
thejh 2011年

2
if(typeof variable === "undefined")
ncubica 2014年

助けてくれてありがとう
phani 2018年

52

これはあなたが思っているよりも大きな質問です。変数はさまざまな方法で空にすることができます。ちょっと知っておくべきことによります。

// quick and dirty will be true for '', null, undefined, 0, NaN and false.
if (!x) 

// test for null OR undefined
if (x == null)  

// test for undefined OR null 
if (x == undefined) 

// test for undefined
if (x === undefined) 
// or safer test for undefined since the variable undefined can be set causing tests against it to fail.
if (typeof x == 'undefined') 

// test for empty string
if (x === '') 

// if you know its an array
if (x.length == 0)  
// or
if (!x.length)

// BONUS test for empty object
var empty = true, fld;
for (fld in x) {
  empty = false;
  break;
}

@Tomalakおっと、ありがとう。ただし、トリプルイコールはオプションだと思います。タイプは文字列を返し、何も強制されません。
ヘムロック2011年

それは本当だ。とにかく、身元確認は害はないと思います。:-)
Tomalak 2011年

1
(!x)はNaNと[]にも当てはまります。(x == null)は、nullまたは未定義のテストです。
パトリックフィッシャー

1
そうです、NaNのことを忘れてしまいました。nullのテストがundefinedのテストと同じように機能することに気づきませんでした。!xただし、空の配列には当てはまりません。
ヘムロック2011

11

これはすべての場合をカバーする必要があります:

function empty( val ) {

    // test results
    //---------------
    // []        true, empty array
    // {}        true, empty object
    // null      true
    // undefined true
    // ""        true, empty string
    // ''        true, empty string
    // 0         false, number
    // true      false, boolean
    // false     false, boolean
    // Date      false
    // function  false

        if (val === undefined)
        return true;

    if (typeof (val) == 'function' || typeof (val) == 'number' || typeof (val) == 'boolean' || Object.prototype.toString.call(val) === '[object Date]')
        return false;

    if (val == null || val.length === 0)        // null or 0 length array
        return true;

    if (typeof (val) == "object") {
        // empty object

        var r = true;

        for (var f in val)
            r = false;

        return r;
    }

    return false;
}

5

上記の多くのソリューションに潜在的な欠点があるので、自分でコンパイルすることにしました。
注:Array.prototype.someを使用します、お使いのブラウザのサポートをご確認ください。

以下の解決策は、次のいずれかに該当する場合、変数が空であると見なします。

  1. JSは、その変数に等しいと考えているfalseすでにのような多くのことをカバーする、0""[]、とさえ[""][0]
  2. 値は nullまたはそのタイプは'undefined'
  3. 空のオブジェクトです
  4. これは、それ自体が空の値のみで構成されるオブジェクト/配列です(つまり、各部分が等しいプリミティブに分解されfalseます)。オブジェクト/配列構造体に再帰的にドリルをチェックします。例えば

    isEmpty({"": 0}) // true
    isEmpty({"": 1}) // false
    isEmpty([{}, {}])  // true
    isEmpty(["", 0, {0: false}]) //true
    

機能コード:

/**
 * Checks if value is empty. Deep-checks arrays and objects
 * Note: isEmpty([]) == true, isEmpty({}) == true, isEmpty([{0:false},"",0]) == true, isEmpty({0:1}) == false
 * @param value
 * @returns {boolean}
 */
function isEmpty(value){
  var isEmptyObject = function(a) {
    if (typeof a.length === 'undefined') { // it's an Object, not an Array
      var hasNonempty = Object.keys(a).some(function nonEmpty(element){
        return !isEmpty(a[element]);
      });
      return hasNonempty ? false : isEmptyObject(Object.keys(a));
    }

    return !a.some(function nonEmpty(element) { // check if array is really not empty as JS thinks
      return !isEmpty(element); // at least one element should be non-empty
    });
  };
  return (
    value == false
    || typeof value === 'undefined'
    || value == null
    || (typeof value === 'object' && isEmptyObject(value))
  );
}

いいね。違いと、それが特定した欠点にどのように対応しているかを指摘することもできます。
Shawn Mehan 2015

1
ここですべての決定を繰り返す必要があります。OK。@victorkohlおよび@kapa関数と比較すると、私のものは最初のレベルよりも深くなり、空ではないように見えますが、実際には空のような値のみで構成されている複雑なオブジェクトを報告できます。例:[{},0,""]。ここでの他のすべてのソリューションは、距離を移動しない2ライナーと、オブジェクトに対して機能し、libを必要とするアンダースコア関数です。
Oleksii Chekulaiev 2015

4

ここに私の最も簡単な解決策があります。

PHP empty関数に触発された

function empty(n){
	return !(!!n ? typeof n === 'object' ? Array.isArray(n) ? !!n.length : !!Object.keys(n).length : true : false);
}

//with number
console.log(empty(0));        //true
console.log(empty(10));       //false

//with object
console.log(empty({}));       //true
console.log(empty({a:'a'}));  //false

//with array
console.log(empty([]));       //true
console.log(empty([1,2]));    //false

//with string
console.log(empty(''));       //true
console.log(empty('a'));      //false


3

http://underscorejs.org/#isEmptyを参照してください

isEmpty_.isEmpty(object)列挙可能なオブジェクトに値が含まれていない(列挙可能な独自のプロパティがない)場合はtrueを返します。文字列および配列のようなオブジェクトの場合、_。isEmptyはlengthプロパティが0であるかどうかをチェックします。


3

@inkednmからの回答を1つの関数に結合します。

   function isEmpty(property) {
      return (property === null || property === "" || typeof property === "undefined");
   }

使用property == null上の組み合わせのチェックのためにnullundefined
SJ00

3

JSONのキーの空のチェックは、ユースケースによって異なります。一般的なユースケースでは、次のことをテストできます。

  1. ない null
  2. ない undefined
  3. 空の文字列ではありません ''
  4. 空のオブジェクトではありません{} [] (配列はオブジェクトです)

関数:

function isEmpty(arg){
  return (
    arg == null || // Check for null or undefined
    arg.length === 0 || // Check for empty String (Bonus check for empty Array)
    (typeof arg === 'object' && Object.keys(arg).length === 0) // Check for empty Object or Array
  );
}

次の場合にtrueを返します。

isEmpty(''); // Empty String
isEmpty(null); // null
isEmpty(); // undefined
isEmpty({}); // Empty Object
isEmpty([]); // Empty Array

2

変数をif条件内に置くだけで、変数に値がある場合はtrueを返し、そうでない場合はfalseを返します。

if (response.photo){ // if you are checking for string use this if(response.photo == "") condition
 alert("Has Value");
}
else
{
 alert("No Value");
};

これは、「空」がnullを意味することを前提としています...しかし、これが彼らの意味するところであるかどうかは、アスカーの質問からは明らかではありません。答えを提供する前に、まずそれを明確にするか、少なくともあなたの答えの仮定としてそれを述べる方がおそらく良いでしょう。
ミール


0

それはあなたが「空」が何を意味するかによります。最も一般的なパターンは、変数が未定義かどうかを確認することです。多くの人は、たとえば次のようにnullチェックも行います。
if (myVariable === undefined || myVariable === null)...

または、短い形式で:
if (myVariable || myVariable === null)...


undefined「定数」はまったく定数ではないため、使用しないでください。typeof myVar === 'undefined'代わりに使用してください。
グッファ2011年

これらの2つの形式はまったく同じではありません。
kapa 2011年

確かに、未定義の型がありますが、標準を引用すると、参照は解決された名前バインディングです。参照は、基本値、参照名、ブール値の厳密な参照フラグの3つのコンポーネントで構成されます。基本値は、未定義、オブジェクト、ブール値、文字列、数値、または環境レコード(10.2.1)のいずれかです。未定義の基本値は、参照をバインディングに解決できなかったことを示します。
ボビーD

0
if (myVar == undefined)

varが宣言されているが、初期化されていないかどうかを確認するために機能します。


1
undefinedコードで再定義できる(つまりundefined = true有効である)ため、これは危険です。
Tomalak 2011年

undefined「定数」はまったく定数ではないため、使用しないでください。typeof myVar === 'undefined'代わりに使用してください。
グッファ2011年

0

未定義を確認してください:

if (typeof response.photo == "undefined")
{
    // do something
}

これはvbと同等のことをします IsEmpty。myvarにnull、空の文字列、0などの値が含まれている場合、それは「空」ではありません。

変数またはプロパティが存在するかどうか、たとえば宣言されているかどうかを確認するには、定義されていない可能性がありますが、in演算子を使用できます。

if ("photo" in response)
{
    // do something
}

0

PHPのempty関数に相当するものを探している場合は、次を確認してください。

function empty(mixed_var) {
  //   example 1: empty(null);
  //   returns 1: true
  //   example 2: empty(undefined);
  //   returns 2: true
  //   example 3: empty([]);
  //   returns 3: true
  //   example 4: empty({});
  //   returns 4: true
  //   example 5: empty({'aFunc' : function () { alert('humpty'); } });
  //   returns 5: false

  var undef, key, i, len;
  var emptyValues = [undef, null, false, 0, '', '0'];

  for (i = 0, len = emptyValues.length; i < len; i++) {
    if (mixed_var === emptyValues[i]) {
      return true;
    }
  }

  if (typeof mixed_var === 'object') {
    for (key in mixed_var) {
      // TODO: should we check for own properties only?
      //if (mixed_var.hasOwnProperty(key)) {
      return false;
      //}
    }
    return true;
  }

  return false;
}

http://phpjs.org/functions/empty:392


0

空の配列...キーレスオブジェクト... falseness const isEmpty = o => Array.isArray(o)&&!o.join( '')。length ||の場合、何が欠けていますか typeof o === 'object' &&!Object.keys(o).length || !(+値);


0

空の変数をチェックするためのより簡単な(短い)ソリューションを次に示します。この関数は、変数が空かどうかをチェックします。提供される変数には、混合値(null、undefined、array、object、string、integer、function)が含まれる場合があります。

function empty(mixed_var) {
 if (!mixed_var || mixed_var == '0') {
  return true;
 }
 if (typeof mixed_var == 'object') {
  for (var k in mixed_var) {
   return false;
  }
  return true;
 }
 return false;
}

//   example 1: empty(null);
//   returns 1: true

//   example 2: empty(undefined);
//   returns 2: true

//   example 3: empty([]);
//   returns 3: true

//   example 4: empty({});
//   returns 4: true

//   example 5: empty(0);
//   returns 5: true

//   example 6: empty('0');
//   returns 6: true

//   example 7: empty(function(){});
//   returns 7: false

奇妙な...私はまだこのソリューションがオンラインに投稿されているのを見ていませんが、「!」の使用 ほとんどの値のチェックに注意する必要があります
JCarrillo19年

0

const isEmpty = val => val == null || !(Object.keys(val) || val).length;


私は理解していません、ユーザーはjavascriptで空をチェックする方法を尋ねたので、ユーザーはjavascriptを知っていると思います、構文がわかっている場合は私の答えを説明する必要はありませんか?
ismaeloliva19年

説明の単語をもう少し追加するとよいでしょう(:他の人も理解したいと思うかもしれません。
RtmY19年

0

function isEmpty(variable) {
  const type = typeof variable
  if (variable === null) return true
  if (type === 'undefined') return true
  if (type === 'boolean') return false
  if (type === 'string') return !variable
  if (type === 'number') return false
  if (Array.isArray(variable)) return !variable.length
  if (type === 'object') return !Object.keys(variable).length
  return !variable
}

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