JavaScript에서 비어 있거나 정의되지 않은 / 널 문자열을 확인하려면 어떻게해야합니까?


2851

내가 본 이 질문에 ,하지만 난 자바 스크립트 구체적인 예제를 참조하지 않았다. string.EmptyJavaScript로 제공 되는 간단한 것이 ""있습니까? 아니면 확인하는 경우 입니까?


2
참고로 String 클래스에 가장 유용한 API는 Mozilla 및 javascript 키트에 있다고 생각합니다 . [elated.com] ( elated.com/articles/working-with-strings )에는 String의 모든 속성, 메서드에 대한 자습서가 있습니다 ... 참고 : Mozilla 링크가 developer.mozilla.org/en/
— 유전자 T

이것을 확인하십시오 : stackoverflow.com/a/36491147/7026966
— Himanshu Shekhar

요구 사항이 명확하게 지정되어 있으면 크게 도움이 될 것입니다. 어떤 값에 대해 isEmpty 가 true를 반환 해야 합니까? ""를 확인하면 값이 Type string and length 0 인 경우에만 true를 반환해야합니다. 여기에서 많은 답변은 일부 또는 모든 잘못된 값에 대해서도 true를 반환해야한다고 가정합니다.
— RobG

답변:


3566

어떤 가치가 있는지 확인하고 싶다면 할 수 있습니다

if (strValue) {
    //do something
}

당신이 널 (null)를 통해 빈 문자열을 위해 특별히 확인해야 할 경우, 나는에 대하여 확인하는 것은 생각 ""하여, 당신의 최선의 방법이다 연산자를 (당신은, 사실, 문자열은 당신이에 대해 비교하고 그것이 알고 그래서).===

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

173
인터프리터가 문자열 리터럴에서 String 객체를 만들 필요가 없기 때문에 length 속성을 테스트하는 것이 실제로 ""에 대해 문자열을 테스트하는 것보다 빠를 수 있습니다.
— Vincent Robert

25
테스트, 크롬 개발자 도구의 일부 순진한 프로파일을하고 @Vincent === ''대 .length어떤 식별 할 수있는 개선을 보여주지 않았다 (그리고 사용 .length당신이 문자열을 가지고 있다고 가정 할 수 있습니다 작동하는 경우 만 해당)
— bdukes

26
@bdukes 당신이 그런 종류의 마이크로 최적화에 관심을 가질 때, 나는 크롬이 당신이 대부분의 성능 문제를 겪고있는 브라우저라고 생각하지 않습니다 ...
— Vincent Robert

15
"빈 문자열"정의에 공백이 포함 된 경우이 솔루션은 적합하지 않습니다. 1 개 이상의 공백 문자열은 위에서 true를 반환합니다. JQuery를 사용하는 경우 간단히 다음을 사용할 수 있습니다. if ($ .trim (ref) .length === 0)-비슷한 질문에 대한이 답변에 따라 : stackoverflow.com/questions/2031085/…
— CodeClimber

115
예상대로 .length > 0실제로 훨씬 빠른 문자열 리터럴에 비해보다 더!
— 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 Conditions는 종종 이런 식으로 작성 if (variable == constant value)되며 '='를 잊어 버린 경우 테스트 대신 변수에 상수 값을 할당합니다. if에서 변수를 할당 할 수 있으므로 코드는 여전히 작동합니다. 따라서이 조건을 작성하는보다 안전한 방법은 상수 값과 변수를 반대로하는 것입니다. 이렇게하면 코드를 테스트 할 때 오류가 발생합니다 (할당 된 Lef-hand 측). JSHint와 같은 것을 사용하여 조건에서 할당을 허용하지 않고 조건을 작성할 때 경고 할 수 있습니다.
— florian

2
/^\s*$/.test(str)실제로 읽을 수없는 수치심 -아마도 간단한 코드 또는 정규식을 사용하여 공백을 제거하는 것이 더 좋을까요? 참조 stackoverflow.com/questions/6623231/...을 또한 stackoverflow.com/questions/10800355/...
— 아드는 수

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

이전의 모든 대답은 좋지만 더 좋습니다. !!( 아님 ) 연산자를 사용하십시오 .

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)있습니까?
— 피터 올슨

6
@PeterOlson 변수에 대해 여러 문자열을 검사하는 부울로 변수를 저장하려는 경우이 작업을 수행하려고합니다. var any = (!!str1 && !!str2 && !!str3)번호가있는 경우 일명 처리
— John Ruddell

23
이것이 항상 사용하는 솔루션입니다. !!str.trim()문자열이 공백으로 만 만들어지지 않도록합니다.
— Dario Oddenino

5
해킹처럼 보이지 않고 Boolean(str)훨씬 더 읽기 쉽고 "wtfish"입니다.
— shinzou

105

str.Emptystr이 String이라는 전제 조건으로 얻을 수있는 가장 가까운 것은 다음 과 같습니다.

if (!str.length) { ...

8
str이 null 인 예외를 던지지 않습니까?
— Pic Mickael

3
@PicMickael 예! 그렇습니다 str.Empty.
— Ates Goral

99

문자열이 단지 빈 공간이 아닌지 확인 해야하는 경우 (이것은 양식 유효성 검사라고 가정합니다) 공백을 바꿔야합니다.

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

8
그러나 실제로 테스트하려는 내용이 공백이 아닌 문자열 인 경우 작업이 수행됩니다. 이것을 테스트하는 저렴한 방법이 있습니까?
— 플래시

4
길이 속성은 어떻습니까?
— driAn

27
모든 공백을 제거하는 대신 공백이 없는지 확인하는 것이 어떻습니까? 공백이 아닌 문자가 있으면 조기에 구제 할 수있는 2 가지 장점이 있으며, 확인한 새 문자열을 반환하지 않습니다. if(str.match(/\S/g)){}
— mpen

34
@Mark FYI, 공백이 아닌 문자가 처음 str.match(/\S/)
— 나타날

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에 대해 너무 많이 알지 않고도 작동한다는 것을 확신 할 수 있습니다.
— Jeff Davis

2
나는 조금 더 나아가서 정의되지 않은 경우에 === 연산자로 고정시킵니다. 그렇지 않으면 단순히 완벽한 대답 일뿐입니다.
— xarlymg89

typeof에서이 switch나를 위해 작동하지 않았다. if (typeof e == "undefined")테스트를 추가 했는데 작동합니다. 왜?
— Lucas

1
@Lucas 이것은 오타 나 감독이기 때문입니다. 올바른 수정 방법입니다. (원본은 e 매개 변수가 아닌 빈 함수의 컨텍스트를 참조하며, 이는 기능을 점검해야 함)
— beeThree

case undefined:대신에 사용할 수 있을까요 case typeof(e) == "undefined":?
— Boris J.

43

lodash : _.isEmpty (value)를 사용할 수 있습니다 .

이 같은 경우를 많이 다루고 {}, '', null, undefined, 등

그러나 그것은 항상 반환 true을위한 Number유형의 자바 스크립트 기본 데이터 형 과 같은 _.isEmpty(10)또는 _.isEmpty(Number.MAX_VALUE)모두 돌아갑니다 true.


_.isEmpty(" "); // => false
— Erich

1
@Erich " "비어 있지 않기 때문에 . _.isEmpty("");true를 반환합니다.
— Moshii

1
꽤 사실-여기에 언급 된 다른 답변 중 일부는 유효성 검사를 의미하고 문자열이 공백으로 만 구성되어 있는지 확인하기 때문에이 단일 lodash 함수 자체로는 그 문제를 해결할 수 없기 때문에 이것을 언급했습니다.
— Erich

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

추신 : JavaScript에서는 줄 바꿈을 사용하지 마십시오 return.


1
각 수표가 무엇을하고 있는지 설명 할 수 있습니까? :)
— DanV

2
-1 그들은 다른 것들을 테스트하고 있습니다. 그것들을 모두 하나의 if진술 에 넣는 것은 의미가 없습니다 .
— Bennett McElwee

1
typeof MyVariable == 'undefined'는 변수가 처음에 선언되고 null로 초기화되지 않은 경우 정의되지 않은 값을 가진 초기화 된 변수와 선언되지 않은 변수를 식별하지 않습니다. 길이 특성을 확인하면 문자열 기본 요소가 문자열 오브젝트로 랩핑됩니다.
— Scott Marcus

35

시험:

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

2
길이 속성이 필요합니까?
— frogcoder

str.trim().lengthstr.trim()내 테스트 결과에 따르면 약 1 % 더 빠릅니다 .
— devildelta

2
@devildelta-테스트에서 1 % 오류입니다.
— Stephen M Irving

OP는 빈 문자열, 정의되지 않은 또는 null을 테스트하려고합니다. 이것은 해당 조건이 아닌 문자열을 테스트하는 것입니다. 공백 만 문자열에 대해서는 아무 말도하지 않았습니다. 변수에 다른 데이터 유형이 저장되어 있지 않다면 다음과 같이 OP 조건을 테스트 할 수 있습니다. if (!str) { ... }
— Stephen M Irving

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

JavaScript에는 빈 문자열을 나타내는 것이 없습니다. 중 하나에 대해 검사를 수행합니다 length(당신이 VAR는 항상 문자열이 될 것을 알고 경우)에 대한""


29

가장 효율적인 방법 에 대해 너무 걱정하지 않아도됩니다 . 가장 명확한 것을 사용하십시오. 나를 위해 그것은 일반적으로 strVar == ""입니다.

Constantin 의 의견에 따르면 strVar가 정수 0 값을 포함하는 방법이 있다면 의도를 명확히하는 상황 중 하나 일 것입니다.


11
나쁜 생각. strVar에 실수로 0이 할당되면 사실입니다.
— Constantin

5
다른 방법으로 얻을 수있는 미세 최적화보다 의도를 명확하게하는 것이 더 중요하지만 엄격한 비교 연산자를 사용하는 ===것이 좋습니다. strVar빈 문자열 인 경우에만 true를 반환합니다 .
— 쓸모없는 코드

정의되지 않은 경우 검사가 실패합니다. 그래서 경우는 (STR)이 잘 작동
— 발렌틴 Heinitz

3
str에 false 값 0 또는 "0"이 할당 된 경우 @ValentinHeinitz (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

완전히 동의하십시오! 좋은 캐치. 위의 답변을 편집하겠습니다!
— tfont

str.length === 0공식 매개 변수가없는 함수에 대해 true를 리턴합니다.
— RobG

20

정규식을 사용할 수도 있습니다.

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

비어 있거나 공백으로 채워진 문자열을 확인합니다.


작동하지만 끔찍하게 비용이 많이 듭니다. 큰 세트가 아닌 하나 또는 두 가지를 확인하려는 경우에 좋습니다.
— Orpheus

19
  1. var a;존재 하는지 확인
  2. false spaces값을 잘라 내고emptiness

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

19

공연

18 개의 선택된 솔루션에 대해 macOS v10.13.6 (High Sierra)에서 테스트를 수행 합니다. 솔루션은 아래 스 니펫에 표시된 약간 다른 (코너 케이스 입력 데이터의 경우) 작동합니다.

결론

  • 간단한 솔루션에 기초하여 !str, ==, ===및 length모든 브라우저 빠르다 (A, B, C, G, I, J)
  • 정규식 ( test, replace)을 기반으로하며 charAt모든 브라우저 (H, L, M, P)에서 가장 느린 솔루션
  • 가장 빠른 것으로 표시된 솔루션은 한 번의 테스트 실행에 대해서만 가장 빠르지 만 많은 실행에서 '빠른'솔루션 그룹 내에서 변경됩니다.

여기에 이미지 설명을 입력하십시오

세부

아래 스 니펫에서는 다른 입력 매개 변수를 사용하여 선택한 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

17

또한 공백으로 채워진 문자열을 "빈"것으로 간주하는 경우.

이 정규식으로 테스트 할 수 있습니다.

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

14

나는 보통 이런 식으로 사용합니다.

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

3
변수가 문자열임을 알고 있으면 가장 빠릅니다. 변수가 정의되지 않은 경우 오류가 발생합니다.
— Adrian Hope-Bailie

@ AdrianHope-Bailie 왜 정의되지 않은 변수를 테스트하겠습니까?
— Abimael Martell

2
@AbimaelMartell 왜 안돼? 메소드 또는 API 호출의 응답과 같이 사용자가 선언하지 않았거나 제어 할 수없는 일부 범위에서 전달 된 변수가 있습니다. 값을 포함하고 위의 확인을 사용한다고 가정 할 수 있지만 정의되지 않았거나 null이면 오류가 발생합니다. var test = null; if (! test.length) {alert ( "adrian is wrong");}
— Adrian Hope-Bailie

OP는 "빈 문자열을 확인하는 방법"을 요청했지만 정의되지 않은 변수는 빈 문자열이 아닙니다. 어쨌든 typeof variable != "undefined"비어 있는지 확인 하기 전에 확인할 수 있습니다 .
— Abimael Martell

10

문자열에 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"을 널로 평가하지 않으며, 길이가 1 인 문자열 (한 문자가 널 문자 임)로 취급하는 것을 선호합니다. 많은 웹 개발자가 다른 유형의 "널"값을 통과 할 수있는 백엔드 데이터베이스를 사용하므로 제대로 처리하지 않으면 혼동을 일으킬 수 있습니다. 모든 개발자의 마음 뒤에 있어야합니다.
— cartbeforehorse

10

한편 우리는 null, undefined, '', '', {}, [] 와 같은 모든 '빈'을 확인하는 하나의 함수를 가질 수 있습니다 . 그래서 나는 이것을 썼습니다.

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이 아닌지 확인할 수도 있습니다. undefined, null 및 empty는 서로 다른 세 가지입니다.


null 또는 undefined 원인에 대해 오류가 발생합니다 .null 또는 undefined 인 변수에 대해 직접 작업을 수행해서는 안됩니다. 다른 답변에서 언급 한 것처럼 str이 있는지 확인하고 abc에서 작동합니다. = ''이지만 abc = ''는 아니지만이 두 가지가 다릅니다.
— 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

내 특정 경우 - empty("0")반환해야합니다 false(즉,하지 빈 문자열이기 때문에) 만 empty(0)반환해야합니다 true그것을 :) 비어 있기 때문에
— Andron

그러나 0 은 비어 있지 않습니다 ! 숫자이며 숫자는 전체 또는 비워 둘 수 없습니다. 물론, 그것은 당신의 기능이므로 귀하의 요구 사항을 충족시켜야하지만 empty이 경우 오해의 소지가 있습니다.
— Bennett McElwee

그 이름 empty이 좋다고 생각합니다 . 빈 함수에 대한 PHP 문서에서 : 이 함수와 Returns FALSE if var exists and has a non-empty, non-zero value. Otherwise returns TRUE.의 차이점 PHP-해당 문자열 '0'은 비어있는 것으로 식별되지 않습니다.
— Andron

내가 말했듯이, 그것은 당신의 기능입니다 : 당신이 원하는 것을 부르십시오. 그러나 empty부정확하고 오해의 소지가있는 이름입니다. emptyPHP의 이름이 잘못 지정된 기능도 있지만 PHP의 실패는 JavaScript와 관련이 없습니다.
— Bennett McElwee

10

나는 여기에 좋은 대답을 보지 못했습니다 (적어도 나에게 맞는 대답은 아닙니다)

그래서 나는 스스로 대답하기로 결정했습니다.

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

정의되어 있지 않은지 확인해야합니다. 그렇지 않으면 메소드가 폭발 할 수 있으며 null 또는 빈 문자열과 같은지 확인할 수 있습니다.

당신은 가질 수 없습니다! 또는 if(value)확인한 후에 만0 하면 거짓 답변을 제공하기 때문에 (0은 거짓).

그런 말로 다음과 같은 방법으로 마무리하십시오.

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

추신 : 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

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()두 번째 옵션) 보다는 어떤 이점이 있습니까? 길이가 0 인 문자열은 이미 거짓이며 괄호는 중복되며 세 번 부정하면 정확히 한 번 부정하는 것과 같습니다.
— John Montgomery

8

이 시도:

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

8

문자열이 아니고 비어 있거나 널이 아닌 값을 테스터 함수에 전달하면 어떻게되는지 조사했습니다. 많은 사람들이 알고 있듯이 JavaScript에서는 (0 == "")가 true이지만 0은 값이거나 비어 있거나 null이 아니므로 테스트 할 수 있습니다.

다음 두 함수는 정의되지 않은 null, 빈 / 공백 값에 대해서만 true를 반환하고 숫자, 부울, 객체, 표현식 등과 같은 다른 모든 항목에 대해서는 false를 반환합니다.

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

더 복잡한 예가 존재하지만 간단하고 일관된 결과를 제공합니다. 정의되지 않은 테스트는 (value == null) 검사에 포함되어 있으므로 테스트 할 필요가 없습니다. 다음 과 같이 C # 동작을 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.