변수가 '정의되지 않음'인지 '널'인지 어떻게 알 수 있습니까?


2127

변수가 undefined또는 인지 어떻게 알 수 null있습니까?

내 코드는 다음과 같습니다.

var EmpName = $("div#esd-names div#name").attr('class');
if(EmpName == 'undefined'){
  // DO SOMETHING
};
<div id="esd-names">
  <div id="name"></div>
</div>

그러나이 작업을 수행하면 JavaScript 인터프리터가 실행을 중단합니다.


답변:


2847

추상 항등 연산자 의 품질을 사용하여이를 수행 할 수 있습니다 .

if (variable == null){
    // your code here.
}

때문에 null == undefined사실, 위의 코드를 모두 잡을 것 null등을 undefined.


5
파이어 폭스에서 이벤트가 null이고 오류가 실행을 차단하는지 테스트하려고합니다. "event is undefined"
Entretoize

3
@MichaelFever 어떻게 작동하지 않습니까? 이것을 콘솔에 붙여 넣기 : const y = undefined; y == null;반환해야합니다true
Seraf

2
@ChrisStryczynski 귀하의 의견에서 예를 들어 y상수 를 선언 했지만 비교 abc하지는 않습니다 ( y). 나는 시험 할 때 y경유 console.log(y == null);에 크롬과 파이어 폭스 내가 가지고 true결과. 오류가 발생하면 =비교 대신 할당 연산자를 사용 하여 다시 할당 할 수 없으므로 ==오류를 반환하는 것이 좋습니다 const.
Pshemo

2
관련 비교의 실제 예 . lgtm.
Ryan Haining

2
변수 인 경우 @ZaytsevDmitry 왜 당신은 테스트를 기대 null하거나 undefined변수가 동일한 경우 통과 0? 문제는 truthy 값을 테스트 아니라, 명시 적으로 테스트에 대해하지 않습니다 null또는 undefined.
rodrigo-silveira

1107

동시에 잡는 표준 방법 은 다음 nullundefined같습니다.

if (variable == null) {
     // do something 
}

-보다 명확하지만 덜 간결한 것과 100 % 동일합니다.

if (variable === undefined || variable === null) {
     // do something 
}

전문 JS를 작성할 때 유형 평등과 ==vs 의 동작을=== 이해할 수 있습니다. 따라서 우리는를 사용 ==하고 비교합니다 null.


다시 편집

사용을 제안하는 의견 typeof은 단순히 잘못되었습니다. 예, 위의 솔루션은 변수가 존재하지 않으면 ReferenceError를 발생시킵니다. 이것은 좋은 것입니다. 이 ReferenceError는 바람직합니다. 컴파일러 오류가 다른 언어에서와 같이 코드를 제공하기 전에 실수를 찾아서 수정하는 데 도움이됩니다. 제어 할 수없는 입력으로 작업하는 경우 try/를 사용하십시오 catch.

코드에서 선언되지 않은 변수에 대한 참조가 없어야합니다.


47
typeof를 사용하는 것이 변수에서 코드에 변수를 정의하거나 참조하지 않으면 ReferenceError가 발생하고 실행이 중단됩니다.
Mani Gandham

56
그것은 좀 더 문체의 요점입니다. 변수가에서 선언되지 않은 경우 모두 , 그 저자의 부분에 정말 나쁜 기록이다. 변수가 선언되었는지 여부를 알아야하며, 이는 의심의 여지가 없습니다. 그러나 그렇습니다 . 어떤 이유로 든 이 경우 변수 대신 변수 대신 window.variable 로 변경해야합니다.이 경우 참조 오류가 발생하지 않습니다. Typeof는 피해야합니다.
temporary_user_name

6
!==대신 썼기 때문에 그렇습니다 !=.
temporary_user_name

9
-OP : "100 % 동등"이라는 비교에 대한 설명은 간단하게 잘못되었습니다. 편집에서 언급했듯이 두 번째는 ReferenceError를 발생시킵니다. 주장에 관해서 : "코드에 선언되지 않은 변수에 대한 참조가 없어야합니다." 정말? 선택적 매개 변수에 대해 들어 본 적이 있습니까? jsfiddle.net/3xnbxfsu
Timothy Kanski

16
@TimothyKanski 선택적 매개 변수는 선택적으로 제공되지 않으면 정의되지 않을 수 있지만 가장 명확하게 선언 된 변수입니다. undefined선언되었지만 초기화되지 않은 변수처럼 선언되고 값 이 있습니다. 즉, var someVar;인수가 실제로 유지되지 않습니다.
chiliNUT

227

위의 답변을 결합하면 가장 완벽한 답변은 다음과 같습니다.

if( typeof variable === 'undefined' || variable === null ){
    // Do stuff
}

이것은 선언되지 않았거나 선언되고 명시 적으로 null 또는 undefined로 설정된 변수에 대해 작동해야합니다. 실제 널이 아닌 값을 갖는 선언 된 변수에 대해 부울 표현식은 false로 평가되어야합니다.


2
@ Aerovistae 나는 typeof그것이 함수가 아니라 연산자 라는 것을 알고 있으므로 괄호가 필요하지 않지만 그럼에도 불구하고 명확하게 읽기 위해 괄호에 감사드립니다.
user664833

1
typeof를 사용하는 대신 if (variable === undefined)를 직접 확인하는 것은 어떻습니까?
겨울 왕국 Crayon

2
변수가 선언되지 않은 경우 ReferenceError가 발생하는 @ArjunU 변수 선언 여부를 모르는 경우 위의 솔루션을 사용하십시오. 변수가 최소한 선언되었다고 보장 할 수 있다면variable == null
Rogue

3
@Rogue가 지적했듯이 변수가 선언되지 않았기 때문에 이것이 더 나은 솔루션입니다.
압둘 Sadik 얄친

내가 틀렸다면 나를 수정하지만 첫 번째 조건은 두 번째 조건의 상위 집합이 아니므로 두 번째 조건은 불필요합니까?
March Ho

186
if (variable == null) {
    // Do stuff, will only match null or undefined, this won't match false
}

14
누군가 이것이 이것이 또 다른 반 답변이라고 생각하는 경우에 대비하여 실제로 작동합니다. undefined로 평가됩니다 null.
Chuck

3
크롬 콘솔에서 나에게 실패했습니다 ... ReferenceError : 변수가 정의되어 있지 않아서 작동하지 않을 수도 있습니다 ...
Eran Medan

48
선언되거나 선언되지 않을 수있는 변수가 아닌 선언 된 변수에 대해서만 작동합니다. (이 경우 typeof + null 검사를 사용해야합니다)

11
그냥 알아 낸 :이 댓글을 추가 할 수 있습니다 /*jshint eqnull:true */귀하의 JS 문서 또는 함수의 상단에, 그리고 JSHint는 당신의 사용에 대해 경고 중지됩니다 == null.
Web_Designer 2016 년

3
@ Aerovistae 당신이 그것을 명시 적으로 언급 된 참조를 가리킬 수 있습니까 ==? if(variable == null)이 답변 의 강압 은 나에게 완전한 의미를 갖습니다.
Ben Aston

93
if (typeof EmpName != 'undefined' && EmpName) {

값이 아닌 경우 true로 평가됩니다.

  • 없는

  • 찾으시는 주소가 없습니다

  • NaN

  • 빈 문자열 ( "")

  • 0

  • 그릇된


13
나는 이것이 산불처럼 퍼진 위험한 기술이라고 생각합니다. 검사되는 많은 변수가 부울이거나 숫자 일 수 있기 때문입니다. 따라서 사용자가 결과를 완전히 이해하지 못하면 좋지 않습니다.
유용한 Bee

이 자바 스크립트 especification의 참조주십시오
villamejia

1
이것은와 동일합니다 if (EmpName). 그것의이 경우 undefined이미 falsy 될 것입니다.
Rudy

1
변수가 정의되지 않은 경우 if (EmpName) 오류가 발생합니다
Thamaraiselvam

1
@Thamaraiselvam Rudy가 이것을 의미한다고 생각합니다 var EmpName; if (EmpName). 변수가 정의되었지만 값이 할당되지 않은 경우
hungerstar

27

jQuery attr()함수는 빈 문자열 또는 실제 값을 반환합니다 (그리고 never null또는 undefined). 그것이 반환하는 유일한 시간 undefined은 선택기가 요소를 반환하지 않은 경우입니다.

따라서 빈 문자열에 대해 테스트 할 수 있습니다. 또는 빈 문자열, null 및 undefined가 false이므로이 작업을 수행 할 수 있습니다.

if (!EmpName) { //do something }

1
Chrome 17.0.963.78 m에서이 오류가 발생합니다.ReferenceError: EmpName is not defined
Eran Medan

6
@EranMedan 나는 이것이 늦다는 것을 알고 있지만 나중에 여기에 오는 사람들을 도울 것입니다. 오류가 발생하는 이유는 전혀 선언되지 않았기 때문입니다. 일반적으로 EmpName (또는 다른 변수)을 함수 또는 다른 함수의 반환 값으로 전달하여 선언합니다 (예 : "var x;"). 정의되지 않았거나 null 또는 빈 문자열을 반환했는지 테스트하려면 위의 솔루션을 사용할 수 있습니다.
Dave

나는 이것이 차가운 질문이라는 것을 알고 있지만 undefined요소에 속성이 존재하지 않으면 jQuery가 반환 합니다 (답변에 따라 선택기에 일치하는 요소가없는 경우뿐만 아니라). 예를 들어, img아니오는 src반환 undefined을위한$('img').attr('src');
codinghands

19

이를 위해 내 자신의 기능을 작성했습니다. JavaScript가 이상합니다.

말 그대로 무엇이든 사용할 수 있습니다. (이것은 변수에 사용 가능한 값이 포함되어 있는지 확인 하지만이 정보는 일반적으로 필요하기 때문에 게시 할 가치가 있다고 생각합니다). 메모를 남겨 두십시오.

function empty(v) {
    let type = typeof v;
    if (type === 'undefined') {
        return true;
    }
    if (type === 'boolean') {
        return !v;
    }
    if (v === null) {
        return true;
    }
    if (v === undefined) {
        return true;
    }
    if (v instanceof Array) {
        if (v.length < 1) {
            return true;
        }
    } else if (type === 'string') {
        if (v.length < 1) {
            return true;
        }
        if (v === '0') {
            return true;
        }
    } else if (type === 'object') {
        if (Object.keys(v).length < 1) {
            return true;
        }
    } else if (type === 'number') {
        if (v === 0) {
            return true;
        }
    }
    return false;
}

TypeScript와 호환됩니다.


이 함수는 PHP 함수정확히 같은 기능을 수행해야 empty()합니다 (참조 RETURN VALUES).

고려 undefined, null, false, 0, 0.0, "0" {}, []등의 비 웁니다.

"0.0", NaN, " ", true비어 있지 않은 것으로 간주됩니다.


2
약간의 null 검사 문제가 발생했습니다. 전달되는 매개 변수가 null인지 또는 빈 객체인지 확인하고 싶습니다 { }. 이것은 흔하고 어리석은 언어 문제이지만 잊어 버렸습니다. 모든 검색에서 정의되지 않은 null 값 또는 느슨한 동등 비교 (==)에 대한 답변을 표시하지만 엄격한 동등 (===) 또는 이와 동등한 것은 아닙니다. 그리고 여기 페이지의 맨 아래 에있는 -1 순위의 답변 (내가 upvoted하기 전에)이 나를 피하는 대답입니다. Object.keys( obj ).length < 1또는 -1이 아니라고 가정하면 === 0 일 수 있습니다. 어쨌든 0으로 상향 조정되었습니다. : p

고마워, 나는이 기능을 드롭하고 많은 코드를 정리할 수있었습니다. 이것이 표준 JS 기능이 아닌 이유는 저쪽입니다.
Andy

3
당신은 변경해야합니다 모든 당신의 ==하기 ===에 여기를, 다음이 합리적인 기능 할 것이다.
Ben McIntyre

12

확인하려는 변수가 전역 변수이면

if (window.yourVarName) {
    // Your code here
}

이 방법으로 yourVarName변수가 존재하지 않아도 오류가 발생 하지 않습니다.

예 : 브라우저가 History API를 지원하는지 알고 싶습니다

if (window.history) {
    history.back();
}

작동 원리 :

window은 전역 변수를 속성으로 보유하는 객체이며 JavaScript에서는 존재하지 않는 객체 속성에 액세스하는 것이 합법적입니다. 경우 history다음 존재하지 않는 window.history반환 undefined. undefined거짓이므로 if(undefined){}블록의 코드가 실행되지 않습니다.


2
독자는 이와 같은 접근 방식이 브라우저에서 실행되는 JavaScript에서 전역 변수가 선언되었는지, 특히 브라우저에서 제공하는 전역 (히스토리 API와 같은)을 사용할 수 있는지 확인하는 관용적이라는 점에 유의해야 합니다. 그것은 작동하지 않습니다 비 전역 변수인지 여부를 확인하는 nullundefined, 나 자바 스크립트는 (Node.js를에서 IE) 브라우저 외부에서 실행중인 경우이 작동합니다. 또한 치료 전역이 설정됩니다 0, false또는 ''신고되지 않은이나되는 것과 동일 undefined또는 null일반적으로 미세이다.
Mark Amery

스크립트가 브라우저에서 실행되고 있다고 가정합니다. 그것은 주어진 것이 아닙니다.
GreenAsJade

12

가장 짧고 쉬운 방법 :

if(!EmpName ){
 // DO SOMETHING
}

EmpName이 다음과 같은 경우 true로 평가됩니다.

  • 없는
  • 찾으시는 주소가 없습니다
  • NaN
  • 문자열 ( "")
  • 0
  • 그릇된

3
유스 케이스는 undefined와 false의 차이점을 알고 싶습니다. 그런 다음 null 검사를 사용합니다.
gast128

11

아마도 가장 짧은 방법은 다음과 같습니다.

if(EmpName == null) { /* DO SOMETHING */ };

증거는 다음과 같습니다.

그리고 여기에 대한 자세한 내용이 있습니다 ==(source here )

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

보너스 : 이유 ===가 더 명확한 이유 ==( agc answer보기 )

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


8

방금 객체에 null이 있는지 확인하는 것과 같은 문제가 있습니다.
나는 이것을 단순히 사용한다 :

if (object) {
    // Your code
}

예를 들면 다음과 같습니다.

if (document.getElementById("enterJob")) {
    document.getElementById("enterJob").className += ' current';
}

3
var A = document.getElementById ( "enterJob")를 설정하는 것이 좋습니다. if (A) A.className + = 'current'; 이런 식으로 당신은 같은 결과를 위해 50 % 일을합니다.하지만 어쩌면 당신은 쇼를 위해 그것을 한 다음에 경례를합니다.
Harry Svensson

7

사용되므로 jQuery를 하면 변수가 정의되지 않은 경우, 또는 그 값이 하나의 기능을 이용하여 널을인지를 결정할 수있다.

var s; // undefined
jQuery.isEmptyObject(s); // will return true;

s = null; // defined as null
jQuery.isEmptyObject(s); // will return true;

// usage
if(jQuery.isEmptyObject(s)){
    alert('Either variable: s is undefined or its value is null');
}else{
     alert('variable: s has value ' + s);
}

s = 'something'; // defined with some value
jQuery.isEmptyObject(s); // will return false;

이것은 나를 위해 작동하지 않았습니다. ReferenceError: s is not defined첫 번째 예 에서 여전히 오류가 발생했습니다 .
Mark

5

jQuery 점검 요소가 널이 아님 :

var dvElement = $('#dvElement');

if (dvElement.length  > 0) {
    // Do something
}
else{
    // Else do something else
}

4

내 지식에 따라 JavaScript에서 아래와 같이 정의되지 않은 null 또는 빈 변수를 확인할 수 있습니다.

if (variable === undefined){
}

if (variable === null){
}

if (variable === ''){
}

모든 조건을 확인하십시오.

if(variable === undefined || variable === null || variable === ''){
}

var예약어입니다. 던질 것입니다SyntaxError
dhilt

4

간단히 다음을 사용할 수 있습니다 (단순히 수행 할 수있는 방법이 있지만 적어도 코드를보고있는 다른 사람들에게는 시각적으로 쉽게 관찰 할 수 있습니다).

if (x === null || x === undefined) {
 // Add your response code here, etc.
}

3

확인하는 가장 쉬운 방법은 다음과 같습니다.

if(!variable) {
  // If the variable is null or undefined then execution of code will enter here.
}

1
변수의 값이 false바람직하지 않은 경우 코드를 실행합니다 .
byxor

문제는 "변수가 '정의되지 않음'인지 '널'인지 결정하는 방법은 무엇입니까?" 자바 스크립트에서 변수의 값이 null이거나 정의되지 않은 경우 값은 false입니다.
M. 아놀드

1
미안하지만, 맞지 않습니다. 이를 증명 하는 JSfiddle 이 있습니다.
byxor

당신의 대답으로 undefined, null 그리고 빈 문자열, 0과 같은 몇 가지 다른 것들, -0 NaNfalse통과. !연산자는 피연산자를 강제로 여기로 variable-부울로 : ecma-international.org/ecma-262/#sec-toboolean
Alireza

그러나 "변수가 정의되어 있지 않은지 또는 null인지 확인하는 방법"이라는 질문을 확인하십시오. 변수가 null이거나 정의되지 않은 경우 if와 함께 사용되는 피연산자는 항상 true로 돌아갑니다.
M. 아놀드

2

아래 솔루션으로 :

const getType = (val) => typeof val === 'undefined' || !val ? null : typeof val;
const isDeepEqual = (a, b) => getType(a) === getType(b);

console.log(isDeepEqual(1, 1)); // true
console.log(isDeepEqual(null, null)); // true
console.log(isDeepEqual([], [])); // true
console.log(isDeepEqual(1, "1")); // false
etc...

다음을 확인할 수 있습니다.

  • 없는
  • 찾으시는 주소가 없습니다
  • NaN
  • 문자열 ( "")
  • 0
  • 그릇된

이것은 "널과 정의되지 않은 것을 어떻게 잡을까?"라는 질문에 대답하지 않습니다. "자바 스크립트에서 모든 잘못된 값을 어떻게 잡을 수 있습니까?"
temporary_user_name

@ Aerovistae, 나는 console.log (isDeepEqual (null, null)); console.log (isDeepEqual (undefined, undefined)); ?
Tony Tai Nguyen

1

변수가 null인지 정의되지 않았는지 테스트하려면 아래 코드를 사용하십시오.

    if(typeof sVal === 'undefined' || sVal === null || sVal === ''){
      console.log('variable is undefined or null');
    }

닫아 요 문자열 typeof을 잃지 undefined말고 똑바로 비교하십시오 . 이것은 효과가 있지만 추가 연산자는 효과가 없습니다.
temporary_user_name

이 경우에는 그렇습니다. typeof를 사용할 필요가 없습니다. 그러나 정의되지 않은 변수를 다룰 때는 typeof를 사용하는 것이 좋습니다. typeof를 사용하는 한 가지 이유는 변수가 선언되지 않은 경우 오류가 발생하지 않기 때문입니다.
DanKodi

그것은 실제로 나쁜 것입니다. 코드에 선언되지 않은 변수를 원하지 않습니다. 변수를 찾아 선언 할 수 있도록 ReferenceError를 발생 시키길 원합니다. 확실히 C ++과 같은 컴파일 된 언어에서는 시도하지 않을 것입니다! JS가 허용한다고해서 반드시 완료되어야하는 것은 아닙니다.
temporary_user_name

1
귀하의 진술은 거꾸로입니다. 정의되지 않은 것을 확인하는 것은 두 번째 단계가 아닌 첫 번째 단계입니다.
Anthony Rutledge

1

이 테스트는 Chrome 콘솔에서 실행합니다. (void 0)을 사용하면 정의되지 않은 것을 확인할 수 있습니다.

var c;
undefined
if (c === void 0) alert();
// output =  undefined
var c = 1;
// output =  undefined
if (c === void 0) alert();
// output =   undefined
// check c value  c
// output =  1
if (c === void 0) alert();
// output =  undefined
c = undefined;
// output =  undefined
if (c === void 0) alert();
// output =   undefined

1

이것을 보자.

  1.  

    let apple; // Only declare the variable as apple
    alert(apple); // undefined

    위의 변수는로만 선언됩니다 apple. 이 경우 메소드를 호출하면 alert정의되지 않은 것으로 표시됩니다.

  2.  

       let apple = null; /* Declare the variable as apple and initialized but the value is null */
       alert(apple); // null

두 번째 것은 applevalue의 변수가 null이기 때문에 null을 표시합니다 .

따라서 값이 정의되지 않았는지 또는 null인지 확인할 수 있습니다.

if(apple !== undefined || apple !== null) {
    // Can use variable without any error
}

0

가장 좋은 방법은:

if(typeof variable==='undefined' || variable===null) {

/* do your stuff */
}

6
이 정확한 솔루션은 @jkindwall에서 2013 년 10 월 11 일에 이미 제공했습니다. stackoverflow.com/a/19323555/2943403 이 코드 전용 게시물은 페이지에 새로운 값을 추가하지 않으므로 완전히 쓸모가 없습니다. 실제로, 페이지 부풀림을 추가하고 연구자들이 그것을 읽는 데 시간을 낭비하고 있습니다. 이 답변을 제거하십시오.
mickmackusa

0
(null == undefined)  // true

(null === undefined) // false

=== 때문에 유형과 값을 모두 확인합니다. 둘 다의 유형은 다르지만 값은 같습니다.


0
var i;

if (i === null || typeof i === 'undefined') {
    console.log(i, 'i is undefined or null')
}
else {
    console.log(i, 'i has some value')
}

3
사용자가 'undefined'라는 단어를 입력하면 어떻게됩니까?
Chuck

귀하의 질문은 훌륭합니다. 조건이 참임을 나타내므로 옵션 normal undefined를 typeof 조건으로 변경해야합니다. @Chuck
KARTHIKEYAN.A

이것은 잘못이다. 문자열 만 typeof산출하지 않습니다 . 또한, 경우 이미 사실 이다 번째 부울이 일 경우에도 중복 될 수 있도록. undefined'undefined'i == nulliundefined
temporary_user_name

1
이 솔루션 (조건이 반전 됨)은 @jkindwall에서 2013 년 10 월 11 일에 이미 제공했습니다. stackoverflow.com/a/19323555/2943403이 코드 전용 게시물은 페이지에 새로운 값을 추가하지 않으므로 완전히 쓸모가 없습니다. 실제로, 페이지 부풀림을 추가하고 연구자들이 그것을 읽는 데 시간을 낭비하고 있습니다. 이 답변을 제거하십시오.
mickmackusa

0

foo == null검사는 트릭을하고 짧은 방식으로 "정의되지 않았거나 널 (null)"사건을 해결해야한다. ( "foo is not declaration"사례를 고려하지 않음.) 그러나 (가장 좋은 관행으로) 3 등가를 가진 사람들은 그것을 받아들이지 않을 수 있습니다. 에 그냥보기 eqeqeq 또는 트리플 - 동일 eslint 및 tslint의 규칙을 ...

이 경우 변수가 개별 인지 undefined또는 null개별 인지 검사 할 때 명시 적 접근 방식을 적용해야하며 주제에 대한 나의 기여 (지금은 음수가 아닌 27 개)가 void 0검사를 수행하는 짧고 안전한 방법으로 사용하는 것입니다 에 대한 undefined.

foo === undefinedundefined는 예약어가 아니므로 음영 처리 될 수 있으므로 사용 이 안전하지 않습니다 ( MDN ). typeof === 'undefined'check를 사용하는 것은 안전하지만, foo-is-declared 경우에 관심이 없다면 다음과 같은 접근 방식을 사용할 수 있습니다.

if (foo === void 0 || foo === null) { ... }

0

확인하는 함수를 작성하는 경우 :

export function isEmpty (v) {
 if (typeof v === "undefined") {
   return true;
 }
 if (v === null) {
   return true;
 }
 if (typeof v === "object" && Object.keys(v).length === 0) {
   return true;
 }

 if (Array.isArray(v) && v.length === 0) {
   return true;
 }

 if (typeof v === "string" && v.trim().length === 0) {
   return true;
 }

return false;
}

-1

특수 값 null은 빈 개체 참조로 간주되므로 typeof null을 호출하면“object”값이 반환됩니다. 버전 5를 통한 Safari와 버전 7을 통한 Chrome은 다른 모든 브라우저가 "객체"를 반환하는 반면 정규식에서 typeof를 호출하면 "기능"을 반환하는 문제가 있습니다.


-1
var x;
if (x === undefined) {
    alert ("only declared, but not defined.")
};
if (typeof y === "undefined") {
    alert ("not even declared.")
};

정의와 선언을 모두 검사하므로 두 번째 만 사용할 수 있습니다.


-1

여전히이 두 가지 조건을 테스트하는 가장 안전하고 안전한 방법은 값을 문자열로 캐스팅하는 것입니다.

var EmpName = $("div#esd-names div#name").attr('class');

// Undefined check
if (Object.prototype.toString.call(EmpName) === '[object Undefined]'){
    // Do something with your code
}

// Nullcheck
if (Object.prototype.toString.call(EmpName) === '[object Null]'){
    // Do something with your code
}

이것이 테스트를 수행하기위한 "최상의 / 안전한 방법"이라고 생각하는 이유를 설명 할 수 있습니까?
sadmicrowave

변환은 항상 "표준화 된"문자열 (예 : [object Undefined])을 반환하므로 잘못된 값을 테스트해도 문제가 발생하지 않습니다. 그것은 진실 / 거짓 가치에 대한 경험에 근거한 나의 의견 일뿐입니다.
n1kkou

설명 주셔서 감사합니다. 나는 비판하지 않고 흥미로운 답변입니다. 왜 이것이 다른 방법보다 우월한 지에 대해 다른 사람들에게 설명을 해주길 원했습니다.
sadmicrowave

걱정 마! 이 유형의 비교에는 많은 문제가 있었으며 지금까지는이 문제에 가장 유용한 접근 방식이라고 생각합니다.
n1kkou

-2

typeof를 사용하여 값이 정의되지 않았거나 null인지 확인할 수 있습니다.

if(typeof value == 'undefined'){

typeof 에 대해서는 이전 답변 ( stackoverflow.com/a/21273362/6305294 ) 의 의견을 참조하십시오 .
Alex

4
이것은 올바르지 않습니다. 잡을 수 없습니다 null. 몇 년 전에 정확하고 완전한 답변을받은 질문에 새롭고 잘못된 답변이 제공되는 이유를 이해하지 못합니다. 현재 답변이 어떻게 든 부족하다고 생각하십니까?
temporary_user_name

-4

if(x==null)JavaScript에서는 나쁜 생각입니다. 다음으로 판단 "=="-예상치 못한 유형 강제 변환을 유발할 수 있으며 CoffeeScript에서 읽을 수 없으므로 조건 판단에 "=="또는 "! ="를 사용하지 마십시오!

if(x)더 낫지 만 0과 ""에 주의하십시오 . 동일한 방법 이 true 가 아닌 false 로 취급됩니다 ."!= null"

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

JavaScript 모범 사례를 참조하십시오 .


3
이것은 완전히 부정확하며, 전문가 급 프레임 워크 또는 소프트웨어에 대한 간단한 연구는이를 곧 입증 할 것입니다. 사용 ==에 비교하는 것은 null입니다 잡기의 표준 방법 및 JS한다. 와 유형 강제 변환 이 특정 컨텍스트에 위험하지 않고, 모두 잡기의 목표 달성의 장점을 취해지고 사실상 와 동시에합니다. 몇 년 전에 만족스럽게 해결 된 질문에 대한 부정확하고 오해의 소지가있는 답변을 제공하기 전에 언어에 대해 더 많은 시간을 보내십시오. nullundefined==nullundefined
temporary_user_name

"=="피하십시오. @Aerovistae
Albert.Qing

3
당신은 저에게 동의하지 않습니다 – 당신은 전체 JavaScript 설정에 동의 하지 않습니다 . 명확하게합시다.
temporary_user_name
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.