Javascript에서 isEmpty를 확인하고 있습니까?


86

Javascript에서 변수가 비어 있는지 어떻게 확인할 수 있습니까? 어리석은 질문에 대해 죄송하지만 저는 Javascript의 초보자입니다!

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

response.photoJSON에서 가져온 것이고 때로는 비어있을 수 있습니다. 데이터 셀이 비어 있습니다! 비어 있는지 확인하고 싶습니다.


2
여기서 "비어 있음"은 무엇을 의미합니까? 확실하지 않은 경우 코드를 보여주세요.
thejh

1
아직 초기화되지 않았다는 뜻입니까?
Franz Payer 2011 년

1
평가 여부를 의미 false합니까?
Felix Kling 2011 년

2
빈 문자열인지 의미합니까?
Mark Byers 2011 년

다음은 보다 읽기 쉬운 방식으로 PHPs empty()함수 의 JavaScript 구현입니다 . stackoverflow.com/a/33319704/3779853
phil294

답변:


135

빈 문자열을 테스트하는 경우 :

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'대신 사용하십시오 .
Guffa 2011 년

4
아니. 변수가 선언되었지만 정의되지 않은 경우 null이 아닙니다. 정의되지 않은 것입니다. 선언되지 않은 변수를 확인하면 런타임 오류가 발생합니다. 또한 var undefined = 1;세 번째 예를 깨뜨릴 것입니다. 항상 사용 typeof하고 확인하십시오 "undefined".
gilly3 2011 년

@Jhon Woodwrick : 첫 번째 경우는 빈 문자열입니다.
thejh

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

U 주셔서 감사합니다 도움이
phani

53

이것은 당신이 생각하는 것보다 더 큰 질문입니다. 변수는 여러 가지 방법으로 비울 수 있습니다. 당신이 알아야 할 것에 달려 있습니다.

// 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 죄송합니다. 감사합니다. 그래도 트리플 같음은 선택 사항이라고 생각합니다. 유형은 문자열을 반환하고 어떤 것도 강제 변환되지 않습니다.
Hemlock 2011 년

사실입니다. 어쨌든 신원 확인은 아프지 않습니다. :-)
Tomalak 2011 년

1
(! x)는 NaN 및 []에도 적용됩니다. (x == null)은 null 또는 undefined에 대한 테스트입니다.
Patrick Fisher

1
네, NaN을 잊어 버렸습니다. null에 대한 테스트가 undefined에 대한 테스트와 동일하게 작동한다는 것을 몰랐습니다. !x그래도 빈 배열에는 사실이 아닙니다.
Hemlock 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-09-22

1
여기서 모든 결정을 반복해야합니다. 확인. @victorkohl 및 @kapa 함수와 비교할 때 내 기능은 첫 번째 수준보다 더 깊이 들어가 비어 있지 않은 것처럼 보이지만 실제로는 비어있는 값으로 만 구성된 복잡한 개체를보고 할 수 있습니다. 예 : [{},0,""]. 여기에있는 다른 모든 솔루션은 거리가 멀지 않은 두 줄과 Objects에서 작동하고 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는 길이 속성이 0인지 확인합니다.


3

@inkednm의 답변을 하나의 함수로 결합 :

   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");
};

이것은 'empty'가 null을 의미한다고 가정하지만 Asker의 질문에서 이것이 의미하는 바는 분명하지 않습니다. 답변을 제공하기 전에 먼저이를 명확히하거나 최소한 답변에 가정으로 언급하는 것이 좋습니다.
Mir


0

"비어 있음"이 의미하는 바에 따라 다릅니다. 가장 일반적인 패턴은 변수가 정의되지 않았 는지 확인하는 것 입니다. 많은 사람들이 null 검사를 수행합니다. 예를 들면 다음과 같습니다.
if (myVariable === undefined || myVariable === null)...

또는 더 짧은 형식 :
if (myVariable || myVariable === null)...


undefined"상수" 는 전혀 상수가 아니므로 사용하지 마십시오 . typeof myVar === 'undefined'대신 사용하십시오 .
구파

이 두 가지 형태는 전혀 동일하지 않습니다.
카파

사실, 정의되지 않은 유형이 있지만 표준을 인용하려면 : 참조는 해결 된 이름 바인딩입니다. 참조는 기본 값, 참조 된 이름 및 부울 값 엄격한 참조 플래그의 세 가지 구성 요소로 구성됩니다. 기본 값은 정의되지 않음, 개체, 부울, 문자열, 숫자 또는 환경 레코드 (10.2.1)입니다. undefined의 기본 값은 참조를 바인딩으로 확인할 수 없음을 나타냅니다.
Bobby D

0
if (myVar == undefined)

var가 선언되었지만 초기화되지 않았는지 확인하기 위해 작동합니다.


1
이것은 undefined코드에서 재정의 될 수 있으므로 위험 합니다 (즉, undefined = true유효 함).
Tomalak 2011 년

undefined"상수" 는 전혀 상수가 아니므로 사용하지 마십시오 . typeof myVar === 'undefined'대신 사용하십시오 .
Guffa 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

빈 배열 ... 키가없는 객체 ... 거짓 const isEmpty = o => Array.isArray (o) &&! o.join ( ''). length || typeof o === '객체'&&! Object.keys (o) .length || ! (+ 값);


0

빈 변수를 확인하는 더 간단한 (짧은) 솔루션이 있습니다. 이 함수는 변수가 비어 있는지 확인합니다. 제공된 변수에는 혼합 된 값 (null, 정의되지 않음, 배열, 개체, 문자열, 정수, 함수)이 포함될 수 있습니다.

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

이상합니다 ...이 솔루션이 아직 온라인에 게시 된 것을 보지 못했지만 "!" 대부분의 값을 확인하는주의를 기울여야한다
J 카리에게

0

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


이해가 안 돼요, 사용자가 자바 스크립트에서 비어 있는지 확인하는 방법을 물었으므로 사용자가 자바 스크립트를 알고 있다고 가정하고 구문이 알려진 경우 내 대답을 설명 할 필요가 없습니까?
ismael oliva 19 년

설명의 몇 단어를 추가하면 더 나은 (될 것입니다 : 아마 다른 사람들이 이해하는 것도 할 수 있습니다.
RtmY

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.