etc./StackOverFlow

JavaScript에서 null과 undefined의 차이점은 무엇입니까?

청렴결백한 만능 재주꾼 2023. 4. 14. 22:03
반응형

질문자 :


JavaScript에서 nullundefined 의 차이점을 알고 싶습니다.



JavaScript에서 undefined 는 다음과 같이 변수가 선언되었지만 아직 값이 할당되지 않았음을 의미합니다.

 var testVar; alert(testVar); //shows undefined alert(typeof testVar); //shows undefined

null 은 할당 값입니다. 값이 없다는 표현으로 변수에 할당할 수 있습니다.

 var testVar = null; alert(testVar); //shows null alert(typeof testVar); //shows object

앞의 예에서 undefinednull 은 두 가지 고유한 유형 undefined 는 유형 자체(정의되지 않음)이고 null 은 객체입니다.

 null === undefined // false null == undefined // true null === null // true

그리고

 null = 'value' // ReferenceError undefined = 'value' // 'value'

sebastian

이것이 차이점이다

(캐릭터가 부족해서 추가로 글을 남깁니다.)


Sebastian Norr

나는 여기 에서 이것을 골랐다.

정의되지 않은 값은 변수에 값이 할당되지 않았을 때 사용되는 기본 값입니다.

null 값은 null, 비어 있거나 존재하지 않는 참조를 나타내는 기본 값입니다.

var를 통해 변수를 선언하고 값을 지정하지 않으면 값이 정의되지 않습니다. 자체적으로 이 값을 WScript.Echo() 또는 alert()하려고 하면 아무 것도 표시되지 않습니다. 그러나 빈 문자열을 추가하면 갑자기 나타납니다.

 var s; WScript.Echo(s); WScript.Echo("" + s);

변수를 선언하고 null로 설정할 수 있으며 "null"이 "undefined"로 출력되는 것을 제외하고는 동작이 동일합니다. 이것은 참으로 작은 차이입니다.

정의되지 않은 변수를 null과 비교할 수도 있고 그 반대의 경우도 마찬가지이며 조건은 true가 됩니다.

 undefined == null null == undefined

그러나 그들은 두 가지 다른 유형으로 간주됩니다. undefined는 그 자체의 유형이지만 null은 특수 개체 값으로 간주됩니다. 변수의 일반 유형을 나타내는 문자열을 반환하는 typeof()를 사용하여 이를 확인할 수 있습니다.

 var a; WScript.Echo(typeof(a)); var b = null; WScript.Echo(typeof(b));

위의 스크립트를 실행하면 다음과 같은 결과가 출력됩니다.

 undefined object

유형이 다르더라도 둘 중 하나의 멤버에 액세스하려고 하면 여전히 동일하게 작동합니다. 예를 들어 예외가 발생합니다. WSH를 사용하면 두려운 "'varname'이 null이거나 개체가 아닙니다."라는 메시지가 표시되며 이는 운이 좋은 경우입니다(다른 기사의 주제임).

변수를 정의되지 않은 상태로 명시적으로 설정할 수 있지만 사용하지 않는 것이 좋습니다. 변수를 null로 설정하고 설정하는 것을 잊은 항목에 대해서는 값을 정의하지 않은 상태로 두는 것이 좋습니다. 동시에 모든 변수를 항상 설정하는 것이 좋습니다. JavaScript는 C 스타일 언어와 다른 범위 체인을 가지고 있어 베테랑 프로그래머도 쉽게 혼동할 수 있으며 변수를 null로 설정하는 것이 이를 기반으로 하는 버그를 방지하는 가장 좋은 방법입니다.

정의되지 않은 팝업이 표시되는 또 다른 경우는 삭제 연산자를 사용할 때입니다. C-world에서 온 사람들은 이것을 객체를 파괴하는 것으로 잘못 해석할 수 있지만 그렇지 않습니다. 이 작업은 배열에서 아래 첨자를 제거하거나 개체에서 멤버를 제거합니다. 배열의 경우 길이에 영향을 미치지 않지만 대신 해당 첨자는 이제 정의되지 않은 것으로 간주됩니다.

 var a = [ 'a', 'b', 'c' ]; delete a[1]; for (var i = 0; i < a.length; i++) WScript.Echo((i+".) "+a[i]);

위 스크립트의 결과는 다음과 같습니다.

 0.) a 1.) undefined 2.) c

존재하지 않는 첨자나 멤버를 읽을 때도 undefined가 반환됩니다.

null과 undefined의 차이점은 다음과 같습니다. JavaScript는 null로 아무 것도 설정하지 않습니다. 이것이 일반적으로 우리가 하는 일입니다. 변수를 undefined로 설정할 수 있지만 null이 우리를 위해 수행된 것이 아니기 때문에 null을 선호합니다. 디버깅할 때 이것은 null로 설정된 모든 것이 JavaScript가 아닌 사용자 자신의 작업임을 의미합니다. 그 외에 이 두 가지 특수 값은 거의 동일합니다.


ayush

null 은 값이 없음을 나타내는 특수 키워드입니다.

다음과 같은 값으로 생각하십시오.

  • "foo"는 문자열이고,
  • true는 부울,
  • 1234는 숫자,
  • null은 정의되지 않았습니다.

undefined 속성은 변수에 null을 포함한 값이 할당되지 않았음을 나타냅니다. 좋다

 var foo;

정의된 빈 변수는 데이터 유형이 undefined null


둘 다 값이 없는 변수 의 값을 나타냅니다.

AND null 은 값이 없는 문자열 을 나타내지 않습니다. - 빈 문자열-


좋다

 var a = ''; console.log(typeof a); // string console.log(a == null); //false console.log(a == undefined); // false

이제 만약

 var a; console.log(a == null); //true console.log(a == undefined); //true

하지만

 var a; console.log(a === null); //false console.log(a === undefined); // true

그래서 각자 사용하는 방법이 있어서

undefined 변수 데이터 유형을 비교하는 데 사용

null 변수 값을 비울 때 사용

 var a = 'javascript'; a = null ; // will change the type of variable "a" from string to object

Mina Gabriel

다음을 주의 깊게 읽으십시오. JavaScript에서 nullundefined 의 차이에 대한 모든 의심을 제거해야 합니다. 또한 이 답변 끝에 있는 유틸리티 함수를 사용하여 보다 구체적인 유형의 변수를 얻을 수 있습니다.

JavaScript에서는 다음과 같은 유형의 변수를 가질 수 있습니다.

  1. 선언되지 않은 변수
  2. 선언되었지만 할당되지 않은 변수
  3. undefined 리터럴로 할당된 변수
  4. null 할당된 변수
  5. undefined 또는 null 이외의 다른 변수로 할당된 변수

다음은 이러한 각 경우를 하나씩 설명합니다.

  1. 선언되지 않은 변수

    • 'undefined' 문자열을 반환 typeof 연산자로만 확인할 수 있습니다.
    • 완전 항등 연산자( === undefined ) == undefined )로 검사할 수 없습니다.
      뿐만 아니라 if 문삼항 연산자 ( ? : ) — 참조 오류가 발생합니다.
  2. 선언되었지만 할당되지 않은 변수

    • typeof 는 '정의되지 않음' 문자열을 반환합니다.
    • == null 검사는 true
    • == undefined 검사는 true
    • === null 로 검사하면 false
    • === undefined 검사는 true
    • if 문삼항 연산자 ( ? : )에 대해 거짓입니다.
  3. undefined 리터럴로 할당된 변수
    이러한 변수는 선언되었지만 할당되지 않은 변수 와 정확히 동일하게 처리됩니다.

  4. null 할당된 변수

    • typeof 는 문자열 '객체'를 반환합니다.
    • == null 검사는 true
    • == undefined 검사는 true
    • === null 검사는 true
    • === undefined 검사 false 반환합니다.
    • if 문삼항 연산자 ( ? : )에 대해 거짓입니다.
  5. undefined 또는 null 이외의 다른 변수로 할당된 변수

    • typeof는 'bigint' , 'boolean' , 'function' , 'number' , 'object' , 'string' , 'symbol' 문자열 중 하나를 반환합니다.

다음은 변수의 올바른 유형 검사를 위한 알고리즘을 제공합니다.

  1. 을 가져 typeof 우리의 변수는 '객체'가 아닌 경우 반환
  2. typeof null '객체' 를 반환하므로 null
  3. 보다 정확한 값을 반환하려면 switch 문으로 Object.prototype.toString.call(o) 을 평가하십시오. ObjecttoString 메서드는 기본/호스트 개체에 대해 '[object ConstructorName]' 과 같은 문자열을 반환합니다. 다른 모든 객체(사용자 정의 객체)의 경우 항상 '[객체 객체]'를 반환합니다.
  4. 마지막 부분이 해당하고(변수의 문자열화된 버전이 '[object Object]' 임) returnConstructorBoolean 매개변수가 true toString -ing하고 거기에서 이름을 추출하여 생성자의 이름을 얻으려고 시도합니다. . 생성자에 도달할 수 없으면 '객체' 가 평소와 같이 반환됩니다. 문자열에 이름이 포함되어 있지 않으면 'anonymous' 가 반환됩니다.

(ECMAScript 2020까지 모든 유형 지원)

 function TypeOf(o, returnConstructorBoolean) { const type = typeof o if (type !== 'object') return type if (o === null) return 'null' const toString = Object.prototype.toString.call(o) switch (toString) { // Value types: 6 case '[object BigInt]': return 'bigint' case '[object Boolean]': return 'boolean' case '[object Date]': return 'date' case '[object Number]': return 'number' case '[object String]': return 'string' case '[object Symbol]': return 'symbol' // Error types: 7 case '[object Error]': return 'error' case '[object EvalError]': return 'evalerror' case '[object RangeError]': return 'rangeerror' case '[object ReferenceError]': return 'referenceerror' case '[object SyntaxError]': return 'syntaxerror' case '[object TypeError]': return 'typeerror' case '[object URIError]': return 'urierror' // Indexed Collection and Helper types: 13 case '[object Array]': return 'array' case '[object Int8Array]': return 'int8array' case '[object Uint8Array]': return 'uint8array' case '[object Uint8ClampedArray]': return 'uint8clampedarray' case '[object Int16Array]': return 'int16array' case '[object Uint16Array]': return 'uint16array' case '[object Int32Array]': return 'int32array' case '[object Uint32Array]': return 'uint32array' case '[object Float32Array]': return 'float32array' case '[object Float64Array]': return 'float64array' case '[object ArrayBuffer]': return 'arraybuffer' case '[object SharedArrayBuffer]': return 'sharedarraybuffer' case '[object DataView]': return 'dataview' // Keyed Collection types: 2 case '[object Map]': return 'map' case '[object WeakMap]': return 'weakmap' // Set types: 2 case '[object Set]': return 'set' case '[object WeakSet]': return 'weakset' // Operation types: 3 case '[object RegExp]': return 'regexp' case '[object Proxy]': return 'proxy' case '[object Promise]': return 'promise' // Plain objects case '[object Object]': if (!returnConstructorBoolean) return type const _prototype = Object.getPrototypeOf(o) if (!_prototype) return type const _constructor = _prototype.constructor if (!_constructor) return type const matches = Function.prototype.toString.call(_constructor).match(/^function\s*([^\s(]+)/) return matches ? matches[1] : 'anonymous' default: return toString.split(' ')[1].slice(0, -1) } }

Arup Hore

null : 변수에 대한 값의 부재; undefined : 변수 자체가 없음;

..여기서 변수는 값과 관련된 기호 이름입니다.

JS는 새로 선언된 변수를 null 로 암시적으로 초기화할 만큼 친절할 수 있지만 그렇지 않습니다.


Dmitry Sychov

undefined는 시스템 수준, 예상치 못한 또는 오류와 같은 값의 부재를 나타내고 null은 프로그램 수준, 정상 또는 예상되는 값의 부재를 나타내는 것으로 간주할 수 있습니다.

JavaScript를 통해: 결정적인 가이드


Kevin

undefined , nullUncaught ReferenceError 대해 설명하겠습니다.

1 - Uncaught ReferenceError : 변수가 스크립트에서 선언되지 않았습니다 . 이 변수에 대한 참조가 없습니다.
2 - undefined : 선언되었지만 초기화되지 않은 변수
3 - null : 선언된 변수이며 빈 값입니다.


BERGUIGA Mohamed Amine

nullundefined 는 다음과 같은 공통점이 있는 두 가지 고유한 개체 유형입니다.

  • 둘 다 각각 nullundefined 단일 값만 보유할 수 있습니다.
  • 둘 다 속성이나 메서드가 없으며 둘 중 하나의 속성을 읽으려고 하면 런타임 오류가 발생합니다(다른 모든 개체의 경우 존재하지 않는 속성을 읽으려고 하면 정의되지 않은 값을 얻음).
  • null 값과 undefined ==!= 연산자에 의해 서로 동일한 것으로 간주됩니다.

그러나 유사점은 여기에서 끝납니다. 일단 키워드 nullundefined 가 구현되는 방식에 근본적인 차이가 있습니다. 이것은 분명하지 않지만 다음 예를 고려하십시오.

 var undefined = "foo"; WScript.Echo(undefined); // This will print: foo

undefined , NaNInfinity 는 사전 초기화된 "초전역" 변수의 이름일 뿐입니다. 런타임에 초기화되며 동일한 이름을 가진 일반 전역 또는 지역 변수로 재정의될 수 있습니다.

이제 null 로 동일한 작업을 시도해 보겠습니다.

 var null = "foo"; // This will cause a compile-time error WScript.Echo(null);

앗! null , truefalse 는 예약된 키워드입니다. 컴파일러에서 변수 또는 속성 이름으로 사용할 수 없습니다.

또 다른 차이점은 undefined 는 기본 유형이고 null 은 객체 유형(객체 참조가 없음을 나타냄)이라는 것입니다. 다음을 고려하세요:

 WScript.Echo(typeof false); // Will print: boolean WScript.Echo(typeof 0); // Will print: number WScript.Echo(typeof ""); // Will print: string WScript.Echo(typeof {}); // Will print: object WScript.Echo(typeof undefined); // Will print: undefined WScript.Echo(typeof null); // (!!!) Will print: object

또한 숫자 컨텍스트에서 nullundefined 가 처리되는 방식에 중요한 차이가 있습니다.

 var a; // declared but uninitialized variables hold the value undefined WScript.Echo(a === undefined); // Prints: -1 var b = null; // the value null must be explicitly assigned WScript.Echo(b === null); // Prints: -1 WScript.Echo(a == b); // Prints: -1 (as expected) WScript.Echo(a >= b); // Prints: 0 (WTF!?) WScript.Echo(a >= a); // Prints: 0 (!!!???) WScript.Echo(isNaN(a)); // Prints: -1 (a evaluates to NaN!) WScript.Echo(1*a); // Prints: -1.#IND (in Echo output this means NaN) WScript.Echo(b >= b); // Prints: -1 (as expected) WScript.Echo(isNaN(b)); // Prints: 0 (b evaluates to a valid number) WScript.Echo(1*b); // Prints: 0 (b evaluates to 0) WScript.Echo(a >= 0 && a <= 0); // Prints: 0 (as expected) WScript.Echo(a == 0); // Prints: 0 (as expected) WScript.Echo(b >= 0 && b <= 0); // Prints: -1 (as expected) WScript.Echo(b == 0); // Prints: 0 (!!!)

null 은 산술 표현식이나 숫자 비교에 사용될 때 0이 됩니다. false 와 유사하게 기본적으로 "0"의 특별한 종류일 뿐입니다. 반면에 undefined 는 진정한 "아무것도" 이며 숫자 컨텍스트에서 사용하려고 하면 NaN ("숫자가 아님")이 됩니다.

nullundefined ==!= 연산자로부터 특별한 취급을 받지만 표현식 (a >= b && a <= b) 을 사용하여b 의 진정한 숫자 동등성을 테스트할 수 있습니다.


R.G.

null 은 "값 없음"을 의미하는 특수 값입니다. null typeof null 이 '객체'를 반환하기 때문에 특수한 개체입니다.

반면에 undefined 는 변수가 선언되지 않았거나 값이 주어지지 않았음을 의미합니다.


Richard H

차이점을 이해하는 가장 좋은 방법은 먼저 JavaScript의 내부 작동에 대해 마음을 비우고 다음 사이의 의미 차이를 이해하는 것입니다.

 let supervisor = "None" // I have a supervisor named "None" let supervisor = null // I do NOT have a supervisor. It is a FACT that I do not. let supervisor = undefined // I may or may not have a supervisor. I either don't know // if I do or not, or I am choosing not to tell you. It is // irrelevant or none of your business.

nullundefined 두 가지 다른 값으로 후자의 두 가지 경우를 구별합니다. 해당 값을 명시적으로 사용하여 해당 의미를 전달할 수 있습니다.

그렇다면 이러한 철학적 기반으로 인해 발생하는 JavaScript 관련 문제에는 어떤 것이 있습니까?

  1. 이니셜라이저 없이 선언된 변수는 undefined 값을 얻습니다. 의도한 값에 대해 아무 말도 하지 않았기 때문입니다.

     let supervisor; assert(supervisor === undefined);
  2. 설정되지 않은 개체의 속성은 해당 속성에 대해 아무도 언급하지 않았기 때문에 undefined

     const dog = { name: 'Sparky', age: 2 }; assert(dog.breed === undefined);
  3. nullundefined 는 서로 "유사합니다". 그러나 그들은 분명히 서로 동등하지 않습니다.

     assert(null == undefined); assert(null !== undefined);
  4. nullundefined 고맙게도 다른 유형을 가지고 있습니다. null Null 유형에 속하고 undefinedUndefined 유형에 속합니다. 이 사양에,하지만 당신은 때문에이를 결코 알지 못할 것이다 typeof 내가 여기를 반복하지 않을 것이다 불가사의 함.

  5. 명시적인 return 문 없이 본문의 끝에 도달하는 함수는 반환된 내용에 대해 아무것도 모르기 때문에 undefined

그건 그렇고, JavaScript에는 "무"의 다른 형태가 있습니다 (철학을 공부하는 것이 좋습니다....)

  • NaN
  • 선언된 적이 없는 변수 사용 및 ReferenceError
  • 시간적 사각지대에서 let 또는 const 정의된 로컬 변수 사용 ReferenceError
  • 희소 배열의 빈 셀. 예, === 를 undefined와 비교 undefined

     $ node > const a = [1, undefined, 2] > const b = [1, , 2] > a [ 1, undefined, 2 ] > b [ 1, <1 empty item>, 2 ]

Ray Toal

정의되지 않음은 변수가 선언되었지만 값이 없음을 의미합니다.

 var var1; alert(var1); //undefined alert(typeof var1); //undefined

Null은 할당입니다.

 var var2= null; alert(var2); //null alert(typeof var2); //object

Chris

헐 박사

객체라는 것을 알고 있는 변수를 설정 null 을 사용하십시오.

유형이 혼합된 변수를 설정 undefined 를 사용하십시오.


이것은 5가지 프리미티브와 객체 유형을 모두 사용한 것으로 undefined 또는 null 의 « 사용 사례 »의 차이점을 설명합니다.

모든 수명 주기 동안 변수가 단지 문자열이라는 것을 알고 있다면 관례에 따라 "" 초기화할 수 있습니다.

 ("") ? true : false; // false typeof ""; // "string"; ("Hello World") ? true : false; // true typeof "Hello World"; // "string"

숫자

모든 수명 주기 동안 변수가 숫자일 뿐이라는 것을 알고 있다면 관례에 따라 0 초기화할 수 있습니다(또는 0 이 사용법에서 중요한 값인 경우 NaN

 (0) ? true : false; // false typeof 0; // "number"; (16) ? true : false; // true typeof 16; // "number"

또는

 (NaN) ? true : false; // false typeof NaN; // "number"; (16) ? true : false; // true typeof 16; // "number"

부울

모든 수명 주기 동안 변수가 부울일 뿐이라는 것을 알고 있다면 관례에 따라 이를 false 초기화할 수 있습니다.

 (false) ? true : false; // false typeof false; // "boolean"; (true) ? true : false; // true typeof true; // "boolean"

물체

모든 수명 주기 동안 변수가 객체일 뿐이라는 것을 알고 있다면 관례에 따라 null 초기화할 수 있습니다.

 (null) ? true : false; // false typeof null; // "object"; ({}) ? true : false; // true typeof {}; // "object"

참고: Object가 항상 true typeof null object 반환하기 때문에 null을 스마트하게 사용 하는 것은 Object의 잘못된 버전입니다. typeof myVarObject Object 및 null 유형 모두에 대해 일관된 값을 반환함을 의미합니다.

모두

변수에 혼합 유형(모든 수명 주기 동안 모든 유형)이 있다는 것을 알고 있다면 관례에 따라 이를 undefined 초기화할 수 있습니다.


Bruno J. S. Lesieur

자바스크립트에서 변수를 선언하면 undefined 값이 할당됩니다. 이는 변수가 변경되지 않았으며 미래에 어떤 값이든 할당할 수 있음을 의미합니다. 또한 선언 시 이 변수가 보유하게 될 값을 모른다는 의미이기도 합니다.

null 변수를 명시적으로 할당할 수 있습니다. 변수에 값이 없음을 의미합니다. 예를 들어 - 어떤 사람들은 중간 이름이 없습니다. 따라서 이러한 경우 null 값을 person 개체의 middlename 변수에 할당하는 것이 좋습니다.

이제 누군가가 person 객체의 middlename 변수에 액세스하고 있고 값이 undefined 라고 가정합니다. 그는 개발자가 이 변수를 초기화하는 것을 잊었는지 또는 값이 없는지 알 수 없습니다. 값이 null 인 경우 사용자는 middlename에 값이 없고 변경되지 않은 변수가 아니라는 것을 쉽게 추론할 수 있습니다.


Shivank Verma

nullundefined 에 대해 들었을 때 혼란스러울 수 있지만 간단하게 시작하겠습니다. 둘 다 여러 면에서 거짓 이고 유사하지만 JavaScript의 이상한 부분은 두 가지 중요한 차이점을 만듭니다. 예를 들어 typeof null 은 다음과 같습니다. typeof undefined'undefined' 동안 'object' ' 입니다.

 typeof null; //"object" typeof undefined; //"undefined";

== 로 확인하면 둘 다 거짓임을 알 수 있습니다.

 null==undefined; //true

또한 객체 속성이나 프리미티브에 null 을 할당할 수 undefined 는 아무 것도 할당하지 않음으로써 간단히 달성할 수 있습니다.

차이점을 한눈에 보여주기 위해 빠른 이미지를 만듭니다.

Null 및 정의되지 않음


Alireza

undefined 유형의 경우 값은 하나뿐입니다. undefined .

를 들어 null : 유형, 오직 하나 개의 값이 null .

따라서 두 경우 모두 레이블은 유형이자 값입니다.

그들 사이의 차이점. 예를 들어:

  • null 은 빈 값입니다.
  • undefined 값은 누락된 값입니다.

또는:

  • undefined 에는 아직 값이 없습니다.
  • null 값이 있었고 더 이상 없습니다.

사실 null식별자가 아닌 특수한 키워드 이므로 할당할 변수로 취급할 수 없습니다.

그러나 undefined식별자 입니다. non-strict 모드와 strict 모드 모두에서 undefined라는 이름의 지역 변수를 생성할 수 있습니다. 그러나 이것은 하나의 끔찍한 생각입니다!

 function foo() { undefined = 2; // bad idea! } foo(); function foo() { "use strict"; undefined = 2; // TypeError! } foo();

zangw

다른 의미 외에도 다른 차이점이 있습니다.

  1. 객체 구조 분해 는 다음 두 값에 대해 다르게 작동합니다.
     const { a = "default" } = { a: undefined }; // a is "default" const { b = "default" } = { b: null }; // b is null
  2. JSON.stringify()는 null 유지 undefined 것은 생략합니다.
     const json = JSON.stringify({ undefinedValue: undefined, nullValue: null }); console.log(json); // prints {"nullValue":null}
  3. typeof 연산자
     console.log(typeof undefined); // "undefined" console.log(typeof null); // "object" instead of "null"

Valeriy Katkov

JavasScript에는 String, Number, Boolean, null 및 undefined의 5가지 기본 데이터 유형이 있습니다. 몇 가지 간단한 예를 들어 설명하려고 합니다.

간단한 기능이 있다고 가정 해 봅시다.

 function test(a) { if(a == null) { alert("a is null"); } else { alert("The value of a is " + a); } }

또한 위의 function if(a == null)if(!a) .

이제 매개변수를 전달하지 않고 이 함수를 호출하면

 test(); // will alert "a is null"; test(4); // will alert "The value of a is " + 4;

또한

 var a; alert(typeof a);

이것은 undefined를 줄 것입니다. 변수를 선언했지만 이 변수에 값을 할당하지 않았습니다.

하지만 우리가 쓴다면

 var a = null; alert(typeof a); // will give alert as object

따라서 null은 객체입니다. 어떤 방식으로 우리는 'a'에 null 값을 할당했습니다.


dinesh_malhotra

null과 undefined는 둘 다 값이 없음을 나타내는 데 사용됩니다.

 var a = null;

a가 초기화되고 정의됩니다.

 typeof(a) //object

null은 JavaScript의 객체입니다.

 Object.prototype.toString.call(a) // [object Object] var b;

b는 정의되지 않고 초기화되지 않았습니다.

정의되지 않은 개체 속성도 정의되지 않습니다. 예를 들어 "x"는 객체 c에 정의되어 있지 않으며 cx에 액세스하려고 하면 undefined를 반환합니다.

일반적으로 정의되지 않은 변수에 null을 할당합니다.


Praveen

이 주제에 대한 Ryan Morr의 철저한 기사에 따르면 ...

"일반적으로 변수나 속성에 값이 아닌 값을 할당하거나 함수에 전달하거나 함수에서 반환해야 하는 경우 null이 거의 항상 최상의 옵션입니다. 간단히 말해서 JavaScript는 undefined를 사용하고 프로그래머는 null을 사용하십시오."

Null 및 Undefined의 영원한 심연 탐험을 참조하십시오.


bholben

자바스크립트에서 모든 변수는 키 값 쌍으로 저장됩니다. 각 변수는 variable_name : variable_value/reference 로 저장됩니다.

undefined는 변수에 메모리 공간이 제공되었지만 값이 할당 되지 않았음을 의미합니다. 가장 좋은 방법은 이 유형을 할당으로 사용하지 않는 것입니다.

이 경우 코드의 나중 지점에서 변수에 값이 없도록 하려는 경우를 표시하는 방법은 무엇입니까? null 유형을 사용할 수 있습니다. 이 유형은 값이 없는 동일한 것을 정의하는 데 사용되는 유형이기도 하지만 이 경우 실제로 메모리에 값이 있는 것처럼 정의되지 않은 것과 동일하지 않습니다. 해당 값은 null입니다.

둘 다 비슷하지만 사용법과 의미가 다릅니다.


poushy

처음부터 Vanilla JavaScript(JS)를 배우려고 할 때 알아두면 좋은 nullundefined 사이에 매우 미묘한 차이를 추가하고 싶습니다.

  • null 은 JS에서 예약된 키워드이고 undefined 는 현재 있는 런타임 환경의 전역 개체에 대한 변수입니다.

코드를 작성하는 동안 이 차이는 nullundefined 가 JavaScript 문의 RHS에서 항상 사용되기 때문에 식별할 수 없습니다. 그러나 표현식의 LHS에서 사용하면 이 차이를 쉽게 관찰할 수 있습니다. 따라서 JS 인터프리터는 아래 코드를 오류로 해석합니다.

 var null = 'foo'

그것은 아래 오류를 제공합니다 :

잡히지 않은 구문 오류: 예기치 않은 토큰 null

아래 코드는 성공적으로 실행되지만 실제 생활에서는 권장하지 않습니다.

 var undefined = 'bar'

undefined 가 전역 객체(클라이언트 측 JS의 경우 브라우저 창 객체)의 변수이기 때문에 작동합니다.


RBT

typeof는 undefined를 반환하므로 undefined는 null이 초기화이므로 변수가 객체를 가리키지 않음을 나타내는 유형입니다(Javascript의 거의 모든 것이 객체임).


Srinivas Kothuri

null - 값이 없음(객체)을 나타내기 위해 변수와 함께 사용되는 할당 값입니다.

undefined - 값이 할당되지 않은 변수이므로 JavaScript는 undefined를 할당합니다(데이터 유형).

undeclared - 변수가 전혀 생성되지 않으면 선언되지 않은 것으로 알려져 있습니다.


Sandip Nirmal

이것 좀 봐. 출력은 천 단어의 가치가 있습니다.

 var b1 = document.getElementById("b1"); checkif("1, no argument" ); checkif("2, undefined explicitly", undefined); checkif("3, null explicitly", null); checkif("4, the 0", 0); checkif("5, empty string", ''); checkif("6, string", "string"); checkif("7, number", 123456); function checkif (a1, a2) { print("\ncheckif(), " + a1 + ":"); if (a2 == undefined) { print("==undefined: YES"); } else { print("==undefined: NO"); } if (a2 === undefined) { print("===undefined: YES"); } else { print("===undefined: NO"); } if (a2 == null) { print("==null: YES"); } else { print("==null: NO"); } if (a2 === null) { print("===null: YES"); } else { print("===null: NO"); } if (a2 == '') { print("=='': YES"); } else { print("=='': NO"); } if (a2 === '') { print("==='': YES"); } else { print("==='': NO"); } if (isNaN(a2)) { print("isNaN(): YES"); } else { print("isNaN(): NO"); } if (a2) { print("if-?: YES"); } else { print("if-?: NO"); } print("typeof(): " + typeof(a2)); } function print(v) { b1.innerHTML += v + "\n"; }
 <!DOCTYPE html> <html> <body> <pre id="b1"></pre> </body> </html>

또한보십시오:

건배!


latitov

많은 "기술적" 답변이 제공되었으며, 모든 답변은 JS를 단순한 프로그래밍 언어로 보는 제한된 관점에서 대부분 정확합니다.

그러나 특히 더 큰 프로젝트/(엔터프라이즈) 응용 프로그램의 일부로 TypeScript 코드를 작성할 때 다음과 같은 생각을 추가하고 싶습니다.

  • 어떤 종류의 백엔드와 대화할 때 JSON을 수신할 가능성이 큽니다.
  • 일부 백엔드는 JSON에서 "null" 사용을 올바르게 피하지만(해당 속성 제거) 다른 백엔드는 그렇지 않습니다.
  • 이제 "null" 값이 의도적으로 누락되었음을 의미할 수 있지만 이러한 의미를 전달하지 않는 경우가 더 많습니다. 대부분의 데이터베이스는 "정의되지 않은" 유형이 없기 때문에 "널"을 사용합니다. 그러나 의미는 실제로 "정의되지 않음"입니다.
  • 그 때문에 "null" 값이 정말로 고의적인 부재를 의미하는지 알 수 없습니다. 따라서 "null"은 실제로 "결측값"의 의도적인 선택을 의미할 수 없습니다. 일반적으로 결정할 수 없습니다.
  • 결과적으로 의미상 "null"과 "undefined"는 실제로 정확히 같은 것입니다.

따라서 조화를 이루기 위해 "null" 사용을 엄격히 반대하며 코드에서 "null" 사용을 중지하도록 권장하고 싶습니다. 생각보다 훨씬 쉽습니다. 오해하지 마세요. 나는 "null" 값을 처리하지 않는 것에 대해 말하는 것이 아니라 코드에서 명시적으로 사용하는 것을 피하기 위해서입니다. 다르게 표현하면 코드는 예를 들어 Angular 와 같은 타사 라이브러리 또는 타사 백엔드를 통해 애플리케이션 외부에서 우연히 전달된 "null" 값으로 계속 작동할 수 있어야 합니다.

이를 가능하게 하는 지침은 다음과 같습니다.

  • 직접적인 정의되지 않은 유형 가드를 피하십시오 if (value === undefined) { ... } .
  • 대신 간접 유형 가드(일명 진실성 검사)를 사용 if (value) { ... }
    • 0 또는 빈 문자열이 의미가 있을 때마다 다음 중 하나를 사용하십시오.
      • Lodash의 isNil 과 같은 명시적 도우미 메서드
      • 또는 비교에 의미 있는 값을 포함합니다(예: if (!value && value !== 0) { ... } )
  • null 사용을 허용하지 않는 린트 규칙 사용을 고려하십시오.

NicBright

undefinednull 의 차이는 미미하지만 차이가 있습니다. 값이 undefined 변수는 초기화된 적이 없습니다. 값이되는 변수 null 명시 값 주어 null 변수를 명시 적으로 값이없는 것을로 하였다 수단. null==undefined 식을 사용하여 undefinednull 을 비교하면 동일합니다.


Stacked

기본적으로 Undefined 는 null이 변수에 할당된 값이 없음을 의미하는지 여부(실제로 null은 그 자체가 객체임)인지 여부에 관계없이 자바스크립트가 런타임에 생성하는 전역 변수입니다.

예를 들어 보겠습니다.

 var x; //we declared a variable x, but no value has been assigned to it. document.write(x) //let's print the variable x

정의되지 않은 것은 출력으로 얻을 수 있는 것입니다.

지금,

 x=5; y=null; z=x+y;

출력으로 5 를 얻습니다. 이것이 Undefinednull 의 주요 차이점입니다.


Zaid Khan

두 특수 값 모두 빈 상태를 의미합니다.

주요 차이점은 undefined 는 아직 초기화되지 않은 변수의 값을 나타내는 반면 null 은 의도적인 개체 부재를 나타냅니다.

변수 번호가 정의되지만 초기 값이 할당되지 않습니다.

 let number; number; // => undefined

number 변수가 정의되지 않았으며 이는 초기화되지 않은 변수를 명확하게 나타냅니다.

존재하지 않는 객체 속성에 액세스할 때도 동일한 초기화되지 않은 개념이 발생합니다.

 const obj = { firstName: 'Dmitri' }; obj.lastName; // => undefined

lastName 속성이 obj에 존재하지 않기 때문에 JavaScript는 obj.lastName을 undefined로 올바르게 평가합니다.

다른 경우에는 변수가 객체를 보유하거나 객체를 반환하는 함수가 필요하다는 것을 알고 있습니다. 그러나 어떤 이유로 개체를 인스턴스화할 수 없습니다. 이러한 경우 null은 누락된 개체의 의미 있는 표시기입니다.

예를 들어, clone()은 일반 JavaScript 객체를 복제하는 함수입니다. 함수는 객체를 반환할 것으로 예상됩니다.

 function clone(obj) { if (typeof obj === 'object' && obj !== null) { return Object.assign({}, obj); } return null; } clone({name: 'John'}); // => {name: 'John'} clone(15); // => null clone(null); // => null

그러나 clone()은 객체가 아닌 인수로 호출될 수 있습니다. 15 또는 null(또는 일반적으로 기본 값, null 또는 정의되지 않음). 이러한 경우 함수는 복제본을 생성할 수 없으므로 누락된 개체의 표시기인 null을 반환합니다.

typeof 연산자는 두 값을 구분합니다.

 typeof undefined; // => 'undefined' typeof null; // => 'object'

엄격한 품질 연산자 ===는 undefined와 null을 올바르게 구별합니다.

 let nothing = undefined; let missingObject = null; nothing === missingObject; // => false

Avid Programmer

undefined와 null의 의미 차이는 자바스크립트 디자인의 우연이며 대부분의 경우 중요하지 않습니다. 실제로 이러한 값에 관심을 가져야 하는 경우 대부분 상호 교환 가능한 것으로 취급하는 것이 좋습니다.

Eloquent Javascript 책에서


Alex Misiulia

출처 : http:www.stackoverflow.com/questions/5076944/what-is-the-difference-between-null-and-undefined-in-javascript

반응형