JavaScript에서 null 값을 확인하려면 어떻게합니까?


573

JavaScript에서 null 값을 확인하려면 어떻게합니까? 아래 코드를 작성했지만 작동하지 않았습니다.

if (pass == null || cpass == null || email == null || cemail == null || user == null) {      

    alert("fill all columns");
    return false;  

}   

JavaScript 프로그램에서 오류를 어떻게 찾을 수 있습니까?


테스트중인 값이 실제로 빈 문자열이 아닌 null인지 확실합니까?
Jan-Peter Vos

72
nulljs에서의 테스트 는 엄격한 연산자로 수행해야합니다===
davin

3
@davin-사실이지만 진술이 여전히 유효하기 때문에 여기서 문제는 아닙니다.
Mark Kahn

3
@ cwolves, 그것이 문제라고 생각하면 그 의견에 답을했을 것입니다. 내 말을 확인하십시오. OP의 관행과 관련하여 언어에 대한 일반적인 진술을 분명히하고 있으며 이것이 그의 문제를 해결한다고 제안하지는 않습니다.
davin

2
@TRiG 제안 된 변경은 근본적으로 질문의 본질을 답변 (내가 아닌)이 맥락을 잃고 이해가되지 않는 지점으로 변경합니다. 편집 내용은 주석이어야합니다.
ic3b3rg

답변:


741

자바 스크립트는 "널 (null)"값 확인과 관련하여 매우 유연합니다. 실제로 빈 문자열을 찾고 있다고 추측합니다.이 경우이 간단한 코드가 작동합니다.

if(!pass || !cpass || !email || !cemail || !user){

빈 문자열 (확인되는 ""), null, undefined, false및 숫자 0NaN

특별히 번호를 확인하는 경우가 미스에 대한 일반적인 실수는 것을 바랍니다 참고 0이 방법은, 그리고 num !== 0선호 (또는 num !== -1또는 ~num(해키 코드은 또한 검사에 대한 -1)) 함수를 돌려 -1, 예를 들어 indexOf)


4
이 테스트의 어느 부분에 어떤 값이 있는지 아는 것이 매우 유용합니다. 때때로 당신은 특히 하나를 찾고 있습니다.
inorganik

2
다소 늦은 진술이지만 그렇습니다. 각 @inorganik에 대해 테스트를 수행 할 수 있습니다. 아래 답변을 참조하십시오.
WebWanderer

28
수치 데이터에 이러한 유형의 테스트를 사용할 때는주의하십시오. 사용하지 마십시오 !또는 !!대한 테스트 null또는 undefined당신은 또한 0의 값을 버리고 싶어하지 않는 한 일반적으로 숫자 데이터
닉스

4
대답 자체는 "... 그리고 숫자 0..."라고 말합니다. 이 답변은 문맥에 따라 ( "사용자 이름, 암호, 전자 메일"이라고 함) 질문에 완벽하게 적합하다고 생각하며 0값을 확인하지 않습니다 . 그러나이 질문과 답변의 인기를 고려할 때 답변 자체에서 언급 할 가치가 있음에 동의합니다.
Mark Kahn

4
@ 헨 데카- 눈을 굴려 실제 질문에 코드를 읽어보세요. 그건 분명히 사용자 이름과 암호에 대해 물어. 나는 아무것도 추측하지 않고 그냥 예의 바르고있었습니다. 당신은 내가 요구 한 것이 아니라 그들이 요구 한 것에 응답 하지 않았다는 사실에 귀찮게합니다 . 대부분의 경우 사람들은 무엇을 요구해야하는지 모릅니다. 원래 질문의 맥락 에서이 답변은 정확합니다. 이제 노이즈 추가를 중단하십시오.
Mark Kahn

418

null을 구체적으로 확인하려면 다음을 사용하십시오.

if (variable === null)

이 테스트는 것입니다 위한 통과 null및 위해 통과하지 않을 것이다 "", undefined, false, 0, 또는 NaN.

또한 각 "false-like"값 (에 대해 true를 반환하는 값)에 대한 절대 검사를 제공했습니다 !variable.

일부 절대 점검의 경우 absolutely equals: ===and 사용을 구현해야합니다 typeof.

JSFiddle을 여기에서 만들어 모든 개별 테스트가 작동하는지 보여줍니다.

각 검사 결과는 다음과 같습니다.

Null Test:

if (variable === null)

- variable = ""; (false) typeof variable = string

- variable = null; (true) typeof variable = object

- variable = undefined; (false) typeof variable = undefined

- variable = false; (false) typeof variable = boolean

- variable = 0; (false) typeof variable = number

- variable = NaN; (false) typeof variable = number



Empty String Test:

if (variable === '')

- variable = ''; (true) typeof variable = string

- variable = null; (false) typeof variable = object

- variable = undefined; (false) typeof variable = undefined

- variable = false; (false) typeof variable = boolean

- variable = 0; (false) typeof variable = number

- variable = NaN; (false) typeof variable = number




Undefined Test:

if (typeof variable == "undefined")

-- or --

if (variable === undefined)

- variable = ''; (false) typeof variable = string

- variable = null; (false) typeof variable = object

- variable = undefined; (true) typeof variable = undefined

- variable = false; (false) typeof variable = boolean

- variable = 0; (false) typeof variable = number

- variable = NaN; (false) typeof variable = number



False Test:

if (variable === false)

- variable = ''; (false) typeof variable = string

- variable = null; (false) typeof variable = object

- variable = undefined; (false) typeof variable = undefined

- variable = false; (true) typeof variable = boolean

- variable = 0; (false) typeof variable = number

- variable = NaN; (false) typeof variable = number



Zero Test:

if (variable === 0)

- variable = ''; (false) typeof variable = string

- variable = null; (false) typeof variable = object

- variable = undefined; (false) typeof variable = undefined

- variable = false; (false) typeof variable = boolean

- variable = 0; (true) typeof variable = number

- variable = NaN; (false) typeof variable = number



NaN Test:

if (typeof variable == 'number' && !parseFloat(variable) && variable !== 0)

-- or --

if (isNaN(variable))

- variable = ''; (false) typeof variable = string

- variable = null; (false) typeof variable = object

- variable = undefined; (false) typeof variable = undefined

- variable = false; (false) typeof variable = boolean

- variable = 0; (false) typeof variable = number

- variable = NaN; (true) typeof variable = number

보시다시피, 테스트하기가 조금 더 어렵습니다 NaN.


9
===엄격한 평등 을 사용하는 경우 유형 검사의 목적은 무엇입니까 ? 감사. 또한 NaN의 테스트를 위해 당신이 사용할 수있는 isNaN(value)리턴 그 true변수가 NaN와 동일한 경우에만 가능합니다.
Michael Malinovskij

16
variable === null"object"유형이 아닌 경우가 있습니까? 없는 경우 확인을 단순화 variable === null하여 두 번째 연결을 버리지 않겠습니까? 감사.
후난 Rostomyan

7
@HunanRostomyan 좋은 질문입니다. 솔직히 말해서, 나는 그것이 있다고 생각하지 않습니다. 이 JSFiddle에서variable === null 방금 테스트 한 것을 사용하여 충분히 안전 합니다. 또한 '&& typeof variable ==='object'`을 사용한 이유는 값이 typeof 라는 흥미로운 사실을 설명 하기 위해서뿐만 아니라 다른 검사의 흐름을 유지하기 위해서였습니다. 그러나 결론적으로, 당신은 간단하게 사용하는 것이 안전합니다 . nullobjectvariable === null
WebWanderer

1
jsfiddle.net/neoaptt/avt1cgem/1 이 답변은 함수로 나뉩니다. 그다지 유용하지는 않지만 어쨌든 그렇게했습니다.
Neoaptt

1
나는 거의 좋은 아이디어가 아닌 무언가를 할 것입니다.이 답변에서 코드를 변경하십시오. 특히 null을 확인할 때 유형 객체에 대해 전혀 불필요한 테스트를 제거하십시오. 이것은 기본적인 코드 스 니펫입니다. 단일 초보자조차도 자세한 테스트를 수행해야한다는 잘못된 학습을 하는 것이 좋습니다 .
ToolmakerSteve

59

바로 교체 =====모든 장소에서 가능합니다.

== 느슨하거나 추상적 인 평등 비교

=== 엄격한 평등 비교입니다

자세한 내용은 평등 비교 및 ​​동일성에 대한 MDN 기사를 참조하십시오 .


2
당신 undefined이 아닌 것으로 간주 되는 경우에만 작동합니다 null. 그렇지 않으면 예기치 않은 동작이 많이 발생합니다. 일반적으로 거짓 값이 아닌 null/ 둘 다에 관심이 있다면 undefined사용하십시오 ==( 그렇지 않으면 몇 가지 경우 중 하나).
Andrew Mao

2
@AndrewMao은 undefined 아니다 null : stackoverflow.com/a/5076962/753237
ic3b3rg

2
나는 그것이 @AndrewMao가 말한 것이라고 믿고 있습니다. 그의 첫 문장은 "이것은 정의되지 않은 null이 실질적으로 동등한 상황에서만 작동합니다."
BobRodes

1
@BobRodes 저의 불완전한 글을 분명히 해주셔서 감사합니다. 고맙습니다 :)
Andrew Mao

@AndrewMao 천만에요. 그리고 나는 당신의 글을 개인적으로 가난한 사람들이라고 부르지 않을 것입니다. 평균보다 좋은 거래라고 말하고 싶습니다. :)
BobRodes 2016 년

30

엄격한 평등 연산자 :-

우리는 null을 확인할 수 있습니다 ===

if ( value === null ){

}

사용하여 if

if( value ) {

}

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

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

9

null구문 을 명시 적으로 확인 하지만 간단한 구문 으로 허용되는 답변보다 개선되었습니다 .

if ([pass, cpass, email, cemail, user].every(x=>x!==null)) {
    // your code here ...
}

// Test
let pass=1, cpass=1, email=1, cemail=1, user=1; // just to test

if ([pass, cpass, email, cemail, user].every(x=>x!==null)) {
    // your code here ...
    console.log ("Yayy! None of them are null");
} else {
    console.log ("Oops! At-lease one of them is null");
}


6

먼저 함수 본문이없는 return 문이 있습니다. 오류가 발생할 가능성이 있습니다.

보다 확실한 확인 방법은 간단히! 운영자:

if (!pass || !cpass || !email || !cemail || !user) {

    alert("fill all columns");

}

12
그 코드는 아마도 함수에 있고, 그는 그것을 보여주지 않았다;)
Mark Kahn

4

드디어 try catch를 사용할 수 있습니다

 try {
     document.getElementById("mydiv").innerHTML = 'Success' //assuming "mydiv" is undefined
 } catch (e) {

     if (e.name.toString() == "TypeError") //evals to true in this case
     //do something

 } finally {}   

당신은 또한 throw당신의 자신의 오류 를 할 수 있습니다 . 참조 .


1
나는 이것이 '파라노이드'코드로 자격이 있다고 생각합니다. 만약 당신이 정말로 이런 것을 썼다면, "mydiv"가 존재할 수 없다는 것을 이해하고있을 것입니다. 우리는 그것이 사실이라고 확신하지 않는 한이 코드에 도달해서는 안되며, 그러한 라인을 시도하기 전에 확신을 가질 수 있도록 응답 코드와 같은 많은 길을 가질 것입니다.
calql8edkos

제어 흐름에는 try and catch를 사용하지 마십시오. 이것은 좋은 해결책이 아닙니다.
Andrew S

4

JavaScript에서는 문자열이 없습니다 null.

느슨한 항등 연산자가 특정 유형의 강제 변환을 수행 한다는 것을 알고 있기 때문에 빈 문자열 인 pass == null경우 true 를 기대할 수 있습니다 .pass==

예를 들어이 표현은 다음과 같습니다.

'' == 0

대조적으로, 완전 평등 연산자 ===는 이것이 거짓이라고 말합니다 :

'' === 0

점을 감안 ''하고 0느슨하게 동일, 당신은 수있는 합리적으로 추측 그 ''null느슨하게 같다. 그러나 그렇지 않습니다.

이 표현은 거짓이다 :

'' == null

문자열을 비교 한 결과 null는 false입니다. 따라서 pass == null다른 모든 테스트는 항상 거짓이며 사용자에게 경고가 표시되지 않습니다.

코드를 수정하려면 각 값을 빈 문자열과 비교하십시오.

pass === ''

그것이 pass문자열인지 확실하다면 pass == '', 빈 문자열만이 빈 문자열과 느슨하기 때문에 작동합니다. 반면에 일부 전문가는 느슨한 항등 연산자가 수행하는 유형 강제 변환을 구체적으로 수행하지 않으려는 경우 항상 JavaScript에서 엄격한 동등성을 사용하는 것이 좋습니다.

어떤 값 쌍이 느슨하게 동일한 지 알고 싶다면 이 주제 에 대한 Mozilla 기사 의 "동일한 비교"표를 참조하십시오 .


4

자바 스크립트에서 undefinednull 을 확인 하려면 다음을 작성해야합니다.

if (!var) {
        console.log("var IS null or undefined");
} else {
        console.log("var is NOT null or undefined");
}

6
! var은 0, "", NaN 및 false와 함께 true입니다.
Matt

3

이것은 NaN 확인에 관한 WebWanderer 솔루션에 대한 의견입니다 (아직 공식적인 의견을 남길 충분한 담당자가 없습니다). 솔루션은 다음과 같이 읽습니다.

if(!parseInt(variable) && variable != 0 && typeof variable === "number")

그러나 이것은 반올림 것 유리수 실패 할 것 0같은, variable = 0.1. 더 나은 테스트는 다음과 같습니다.

if(isNaN(variable) && typeof variable === "number")

1
버그 가브리엘을 지적 해 주셔서 감사합니다. 그 외에, 나는 변경하여 검사를 해결할 수 있었다 parseInt으로 parseFloat (처음에 나에게 명백해야한다). isNan많은 개발자 isNaN들이 값이 들어가고 부울이 나오는 일종의 "매직 박스" 와 같은 기능을 보는 것처럼 느끼기 때문에 함수 사용을 피 했습니다. 그러나 그렇습니다. 제안 된 테스트는 효과가 있으며 사용하기에 완벽합니다. 지금까지 게시물을 확인하지 못했습니다.
WebWanderer

1
좋아요, 작동하는 것 같습니다. 왜 피했는지에 대한 의견에 감사드립니다 isNaN. 나는 그 논리를 뒷받침 할 수 있습니다. Underscore.js 메소드도 있습니다.이 방법은 더 혼란스럽고 블랙 박스이지만을 활용하기 때문에 어쨌든 주목할 가치가 NaN !== NaN있습니다. Object.prototype.toString.call(variable) === '[object Number]' && variable !== +variable
Gabriel

2

실제로 if (value !== null || value !== undefined) 사용 if (value)하면 0 또는 false 값을 필터링 할 수 있기 때문에 사용해야 할 수도 있습니다.

다음 두 가지 기능을 고려하십시오.

const firstTest = value => {
    if (value) {
        console.log('passed');
    } else {
        console.log('failed');
    }
}
const secondTest = value => {
    if (value !== null && value !== undefined) {
        console.log('passed');
    } else {
        console.log('failed');
    }
}

firstTest(0);            // result: failed
secondTest(0);           // result: passed

firstTest(false);        // result: failed
secondTest(false);       // result: passed

firstTest('');           // result: failed
secondTest('');          // result: passed

firstTest(null);         // result: failed
secondTest(null);        // result: failed

firstTest(undefined);    // result: failed
secondTest(undefined);   // result: failed

내 상황에서, 난 그냥 값이 null이 있는지 확인하기 위해 필요하고 정의되지 않은 난 필터에 싶지 않았다 0거나 false또는 ''값. 따라서 두 번째 테스트를 사용했지만 필터도 필터링해야 할 수 있으므로 첫 번째 테스트를 사용하게 될 수 있습니다.


1

값이 null인지 테스트하는 다른 방법을 찾았습니다.

if(variable >= 0 && typeof variable === "object")

nullA와 작용 numberobject동시에. 비교 null >= 0또는 null <= 0결과 true. 비교 null === 0하거나 null > 0또는 것은 null < 0거짓 발생합니다. 그러나 null객체이므로 null로 감지 할 수 있습니다.

마녀의 성격 이 좀 더 복잡한 기능을 만들었습니다.

/* function natureof(variable, [included types])
included types are 
    null - null will result in "undefined" or if included, will result in "null"
    NaN - NaN will result in "undefined" or if included, will result in "NaN"
    -infinity - will separate negative -Inifity from "Infinity"
    number - will split number into "int" or "double"
    array - will separate "array" from "object"
    empty - empty "string" will result in "empty" or
    empty=undefined - empty "string" will result in "undefined"
*/
function natureof(v, ...types){
/*null*/            if(v === null) return types.includes('null') ? "null" : "undefined";
/*NaN*/             if(typeof v == "number") return (isNaN(v)) ? types.includes('NaN') ? "NaN" : "undefined" : 
/*-infinity*/       (v+1 === v) ? (types.includes('-infinity') && v === Number.NEGATIVE_INFINITY) ? "-infinity" : "infinity" : 
/*number*/          (types.includes('number')) ? (Number.isInteger(v)) ? "int" : "double" : "number";
/*array*/           if(typeof v == "object") return (types.includes('array') && Array.isArray(v)) ? "array" : "object";
/*empty*/           if(typeof v == "string") return (v == "") ? types.includes('empty') ? "empty" : 
/*empty=undefined*/ types.includes('empty=undefined') ? "undefined" : "string" : "string";
                    else return typeof v
}

// DEMO
let types = [null, "", "string", undefined, NaN, Infinity, -Infinity, false, "false", true, "true", 0, 1, -1, 0.1, "test", {var:1}, [1,2], {0: 1, 1: 2, length: 2}]

for(i in types){
console.log("natureof ", types[i], " = ", natureof(types[i], "null", "NaN", "-infinity", "number", "array", "empty=undefined")) 
}


1

나는 놀라운 일을하는 매우 간단한 기능을 만들었습니다.

function safeOrZero(route) {
  try {
    Function(`return (${route})`)();
  } catch (error) {
    return 0;
  }
  return Function(`return (${route})`)();
}

경로는 폭파 할 수있는 모든 값의 체인입니다. jQuery / cheerio 및 객체 등에 사용합니다.

예 1 : this와 같은 간단한 객체 const testObj = {items: [{ val: 'haya' }, { val: null }, { val: 'hum!' }];};.

그러나 우리가 만들지 않은 매우 큰 물체 일 수 있습니다. 그래서 나는 그것을 통과합니다.

let value1 = testobj.items[2].val;  // "hum!"
let value2 = testobj.items[3].val;  // Uncaught TypeError: Cannot read property 'val' of undefined

let svalue1 = safeOrZero(`testobj.items[2].val`)  // "hum!"
let svalue2 = safeOrZero(`testobj.items[3].val`)  // 0

물론 당신이 선호한다면 당신은 ... null또는 'No value'당신의 필요에 맞는 것을 사용할 수 있습니다 .

일반적으로 DOM 쿼리 또는 jQuery 선택기가 없으면 오류가 발생할 수 있습니다. 그러나 다음과 같은 것을 사용하십시오 :

const bookLink = safeOrZero($('span.guidebook > a')[0].href);
if(bookLink){
  [...]
}

1

lodash 모듈을 사용하여 값이 null인지 정의되지 않았는지 확인할 수 있습니다.

_.isNil(value)
Example 

 country= "Abc"
    _.isNil(country)
    //false

   state= null
    _.isNil(state)
    //true

city= undefined
    _.isNil(state)
    //true

   pin= true
    _.isNil(pin)
    // false   

참조 링크 : https://lodash.com/docs/#isNil


0

예를 들어 DB에서 부울 값이 오는 경우에는 작동하지 않습니다.

 value = false

 if(!value) {
   // it will change all false values to not available
   return "not available"
 }

0

변수가 선언 되었지만 값이 지정되지 않은 경우 JAVASCRIPT의 AFAIK 는 유형입니다 . value 대신에 인스턴스 를 보유하고 있더라도 변수를 확인할 수 있습니다 .undefinedobject

null을 검사 true하여 API에서 반환되는 nullity를 확인하는 도우미 메서드를 만듭니다 .

변수가 비어 있는지 확인하는 도우미 함수 :

function isEmpty(item){
    if(item){
        return false;
    }else{
        return true;
    }
}

try-catch 예외적 API 호출 :

try {

    var pass, cpass, email, cemail, user; // only declared but contains nothing.

    // parametrs checking
    if(isEmpty(pass) || isEmpty(cpass) || isEmpty(email) || isEmpty(cemail) || isEmpty(user)){
        console.log("One or More of these parameter contains no vlaue. [pass] and-or [cpass] and-or [email] and-or [cemail] and-or [user]");
    }else{
        // do stuff
    }

} catch (e) {
    if (e instanceof ReferenceError) {
        console.log(e.message); // debugging purpose
        return true;
    } else {
        console.log(e.message); // debugging purpose
        return true;
    }
}

일부 테스트 사례 :

var item = ""; // isEmpty? true
var item = " "; // isEmpty? false
var item; // isEmpty? true
var item = 0; // isEmpty? true
var item = 1; // isEmpty? false
var item = "AAAAA"; // isEmpty? false
var item = NaN; // isEmpty? true
var item = null; // isEmpty? true
var item = undefined; // isEmpty? true

console.log("isEmpty? "+isEmpty(item));

1
뭐? 이 답변은이 게시물과 관련이 없습니다. 우연히이 글에이 답변을 게시하셨습니까?
WebWanderer

isEmpty함수는 정확히 같은 동작을합니다 !. 기능을 발명 할 필요가 없습니다. 그냥하세요 if (!pass || !cpass || !email ...). WebWanderer의 의견에 따르면이 게시물의 중간 부분 인 "try-catch extra API call"은이 질문과 관련이없는 것으로 보입니다. 당신의 의도를 설명하십시오-언제 유용합니까? 그것은 질문과 어떤 관련이 있습니까?
ToolmakerSteve

0

오류 상태 확인 :

// Typical API response data
let data = {
  status: true,
  user: [],
  total: 0,
  activity: {sports: 1}
}

// A flag that checks whether all conditions were met or not
var passed = true;

// Boolean check
if (data['status'] === undefined || data['status'] == false){
  console.log("Undefined / no `status` data");
  passed = false;
}

// Array/dict check
if (data['user'] === undefined || !data['user'].length){
  console.log("Undefined / no `user` data");
  passed = false;
}

// Checking a key in a dictionary
if (data['activity'] === undefined || data['activity']['time'] === undefined){
   console.log("Undefined / no `time` data");
   passed = false;
}

// Other values check
if (data['total'] === undefined || !data['total']){
  console.log("Undefined / no `total` data");
  passed = false;
}

// Passed all tests?
if (passed){
  console.log("Passed all tests");
}

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.