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


2851

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


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

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

요구 사항이 명확하게 지정되어 있으면 크게 도움이 될 것입니다. 어떤 값에 대해 isEmptytrue를 반환 해야 합니까? ""를 확인하면 값이 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.