JavaScript에서 null과 undefined의 차이점은 무엇입니까?
나는 차이가 사이에 무엇인지 알고 싶어 null
하고 undefined
자바 스크립트로.
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
앞의 예에서, 분명하다 undefined
그리고 null
두 가지 유형은 다음과 같습니다 undefined
동안 유형 (정의되지 않은) 자체가 null
개체입니다.
null === undefined // false
null == undefined // true
null === null // true
과
null = 'value' // ReferenceError
undefined = 'value' // 'value'
여기 에서 골랐어 요
정의되지 않은 값은 변수에 값이 할당되지 않은 경우 사용되는 기본 값입니다.
null 값은 null, 비어 있거나 존재하지 않는 참조를 나타내는 기본 값입니다.
var를 통해 변수를 선언하고 값을 지정하지 않으면 값이 정의되지 않습니다. 그 자체로는 WScript.Echo () 또는 alert ()이 값을 시도하면 아무것도 볼 수 없습니다. 그러나 빈 문자열을 추가하면 갑자기 나타납니다.
var s;
WScript.Echo(s);
WScript.Echo("" + s);
변수를 선언하고 null로 설정할 수 있으며 "null"이 인쇄되고 "undefined"가 출력되는 것을 제외하고는 동작이 동일합니다. 이것은 실제로 작은 차이입니다.
정의되지 않은 변수를 null로 또는 그 반대로 비교할 수도 있으며 조건은 참이됩니다.
undefined == null
null == undefined
그러나 두 가지 유형으로 간주됩니다. undefined는 자체 유형이지만 null은 특수 개체 값으로 간주됩니다. 변수의 일반적인 유형을 나타내는 문자열을 반환하는 typeof ()를 사용하여이를 확인할 수 있습니다.
var a;
WScript.Echo(typeof(a));
var b = null;
WScript.Echo(typeof(b));
위 스크립트를 실행하면 다음과 같은 결과가 나타납니다.
undefined
object
유형이 다르 든 관계없이 둘 중 하나의 구성원에 액세스하려고하면 여전히 동일하게 작동합니다. 예를 들어 예외가 발생한다고 말합니다. WSH를 사용하면 두려운 " 'varname'is null or not an object"를 볼 수 있습니다. 운이 좋다면 (하지만 다른 기사의 주제입니다).
명시 적으로 변수를 정의되지 않도록 설정할 수 있지만 반대하는 것이 좋습니다. 변수를 null로 설정하고 설정하는 것을 잊은 값은 정의되지 않은 상태로 두는 것이 좋습니다. 동시에 항상 모든 변수를 설정하는 것이 좋습니다. JavaScript는 C 스타일 언어와는 다른 범위 체인을 가지고있어 베테랑 프로그래머도 쉽게 혼동 할 수 있으며 변수를 null로 설정하는 것이이를 기반으로하는 버그를 방지하는 가장 좋은 방법입니다.
정의되지 않은 팝업이 표시되는 또 다른 경우는 delete 연산자를 사용할 때입니다. C 세계에서 온 사람들은 이것을 물체를 파괴하는 것으로 잘못 해석 할 수 있지만 그렇지 않습니다. 이 작업은 배열에서 첨자를 제거하거나 개체에서 멤버를 제거합니다. 배열의 경우 길이에 영향을주지 않지만 해당 첨자는 이제 정의되지 않은 것으로 간주됩니다.
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로 설정하지 않습니다. 보통 우리가하는 일입니다. 변수를 정의되지 않음으로 설정할 수 있지만, 우리를 위해 수행 된 것이 아니기 때문에 null을 선호합니다. 디버깅 할 때 이것은 null로 설정된 모든 것이 JavaScript가 아니라 사용자가 수행하는 것임을 의미합니다. 그 외에도이 두 특수 값은 거의 동일합니다.
null 은 값이 없음을 나타내는 특수 키워드입니다.
다음과 같은 값으로 생각하십시오.
- "foo"는 문자열입니다.
- true는 boolean입니다.
- 1234는 숫자이고,
- null은 정의되지 않았습니다.
정의되지 않은 속성은 변수에 null도 포함 된 값이 할당되지 않았 음을 나타냅니다. 처럼
var foo;
정의 된 빈 변수는 null
데이터 유형입니다.undefined
둘 다 값이없는 변수 의 값을 나타냅니다.
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
그래서 각자 고유의 사용 방법이 있습니다.
정의되지 않음 변수 데이터 유형을 비교하는 데 사용
null 변수 값을 비우는 데 사용
var a = 'javascript';
a = null ; // will change the type of variable "a" from string to object
(캐릭터 부족으로 캐릭터 추가가 가능하므로 게시 할 수 있습니다.)
null : 변수 값이 없습니다. 정의되지 않음 : 변수 자체가 없음;
.. 여기서 변수는 값과 연관된 기호 이름입니다.
JS는 새로 선언 된 변수를 null 로 암시 적으로 초기화하기에 충분히 친절 할 수 있지만 그렇지 않습니다.
다음을주의 깊게 읽으십시오. JavaScript에서 null 과 undefined 의 차이점에 대한 모든 의심을 제거합니다 . 또한 아래에 제공된 유틸리티 기능을 사용하여 유형을 정확하게 결정할 수 있습니다.
JavaScript에서는 다음과 같은 유형의 변수를 가질 수 있습니다.
- 선언되지 않은 변수
- 선언되었지만 할당되지 않은 변수
- 정의되지 않은 리터럴로 할당 된 변수
- 리터럴 null로 할당 된 변수
- 정의되지 않거나 널이 아닌 다른 것으로 지정된 변수
다음은 이러한 각 사례를 하나씩 설명합니다.
선언되지 않은 변수 : 다음은 선언되지 않은 변수에 적용됩니다.
- 'undefined' 문자열을 반환 하는 typeof () 로만 확인할 수 있습니다.
- 확인할 수 없습니다 == 또는 === 나에 의해 경우 또는 조건 연산자 ? (참조 오류 발생)
선언되었지만 할당되지 않은 변수
- typeof 는 'undefined' 문자열을 반환합니다.
- == null 로 확인하면 true가 반환됩니다.
- == 정의되지 않은 확인 은 true를 반환 합니다.
- === null 로 확인하면 false가 반환됩니다.
- === 정의되지 않은 확인 은 true를 반환 합니다.
- if 또는 조건부 연산자 ? 거짓을 반환
정의되지 않은 리터럴로 할당 된 변수 : 이러한 변수는 선언 되었지만 할당되지 않은 변수 와 유사하게 처리됩니다 .
리터럴 null로 할당 된 변수
- typeof 는 문자열 '객체'를 반환합니다.
- == null 로 확인하면 true가 반환됩니다.
- == 정의되지 않은 확인 은 true를 반환 합니다.
- === null 로 확인하면 true가 반환됩니다.
- === 정의되지 않은 검사 는 false를 반환합니다.
- if 또는 조건부 연산자 ? 거짓을 반환
정의되지 않거나 널이 아닌 다른 것으로 지정된 변수
- typeof는 'string' , 'number' , 'boolean' , 'function' , 'object' , 'symbol' 문자열 중 하나를 반환합니다.
다음은 변수의 올바른 유형 검사를위한 알고리즘을 제공합니다.
- 확인 선언되지 않은 / 할당 / 할당 정의되지 않은 사용 대해서 typeof . 'undefined' 문자열이 반환되면 반환합니다.
- === 사용하여 null 을 확인하십시오 . 반환 '널 (null)' 의 경우 사실 .
- typeof를 사용하여 실제 유형을 확인하십시오 . 'object'와 같지 않은 경우 반환 유형
- Object.prototype.toString.call (o) 을 호출 하여 실제 개체 유형을 확인합니다. 모든 내장 자바 스크립트 또는 DOM 정의 객체 에 대해 '[object ObjectType]' 유형의 문자열을 반환합니다 . 사용자 정의 개체의 경우 '[object Object]'를 반환합니다.
유형을 결정하기 위해 다음 유틸리티 함수를 사용할 수도 있습니다. 현재 모든 ECMA 262 2017 유형을 지원합니다.
function TypeOf(o,bReturnConstructor)
{
if(typeof o==='undefined') return 'undefined'
if(o===null) return 'null'
if(typeof o!=='object') return typeof o
var type=Object.prototype.toString.call(o)
switch(type)
{
//Value types:4
case '[object Number]': type='number';break;
case '[object String]': type='string';break;
case '[object Boolean]': type='boolean';break;
case '[object Date]': type='date';break;
//Error Types:7
case '[object Error]': type='error';break;
case '[object EvalError]': type='evalerror';break;
case '[object RangeError]': type='rangeerror';break;
case '[object ReferenceError]': type='referenceerror';break;
case '[object SyntaxError]': type='syntaxerror';break;
case '[object TypeError]': type='typeerror';break;
case '[object URIError]': type='urierror';break;
//Indexed Collection and Helper Types:13
case '[object Array]': type='array';break;
case '[object Int8Array]': type='int8array';break;
case '[object Uint8Array]': type='uint8array';break;
case '[object Uint8ClampedArray]': type='uint8clampedarray';break;
case '[object Int16Array]': type='int16array';break;
case '[object Uint16Array]': type='uint16array';break;
case '[object Int32Array]': type='int32array';break;
case '[object Uint32Array]': type='uint32array';break;
case '[object Float32Array]': type='float32array';break;
case '[object Float64Array]': type='float64array';break;
case '[object ArrayBuffer]': type='arraybuffer';break;
case '[object SharedArrayBuffer]': type='sharedarraybuffer';break;
case '[object DataView]': type='dataview';break;
//Keyed Collection Types:2
case '[object Map]': type='map';break;
case '[object WeakMap]': type='weakmap';break;
//Set Types:2
case '[object Set]': type='set';break;
case '[object WeakSet]': type='weakset';break;
//Operation Types
case '[object RegExp]': type='regexp';break;
case '[object Proxy]': type='proxy';break;
case '[object Promise]': type='promise';break;
case '[object Object]': type='object';
if(bReturnConstructor && o.constructor) type=o.constructor.toString().match(/^function\s*([^\s(]+)/)[1];
break;
default:
type=type.split(' ')[1]
type=type.substr(0,type.length-1)
}
return type
}
undefined는 시스템 수준, 예상치 못한 또는 오류와 유사한 값 부재를 나타내고 null은 프로그램 수준, 정상 또는 예상 값 부재를 나타내는 것으로 간주 할 수 있습니다.
JavaScript를 통해 : The Definitive Guide
나는 설명 할 것 undefined
, null
그리고 Uncaught ReferenceError
:
1- Uncaught ReferenceError
: 변수 가 스크립트 에 선언되지 않았습니다 .이 변수에 대한 참조가 없습니다 .
2- undefined
: 변수가 선언되었지만 초기화되지 않았습니다.
3- null
: 변수가 선언되었으며 빈 값입니다.
정의되지 않음은 변수가 선언되었지만 값이 없음을 의미합니다.
var var1;
alert(var1); //undefined
alert(typeof var1); //undefined
Null은 할당입니다.
var var2= null;
alert(var2); //null
alert(typeof var2); //object
null 및 undefined 는 다음과 같은 공통점이있는 두 가지 고유 한 개체 유형입니다.
- 둘 다 하나의 값 ( null 및 undefined) 만 가질 수 있습니다 .
- 둘 다 속성이나 메서드가 없으며 둘 중 하나의 속성을 읽으려고하면 런타임 오류가 발생합니다 (다른 모든 개체의 경우 존재하지 않는 속성을 읽으려고하면 undefined 값이 표시됨).
- null 및 undefined 값 은
==
및!=
연산자에 의해 서로 동일한 것으로 간주됩니다 .
그러나 유사점은 여기서 끝납니다. 일단 키워드 null 및 undefined 가 구현 되는 방식에는 근본적인 차이 가 있습니다. 이것은 분명하지 않지만 다음 예를 고려하십시오.
var undefined = "foo";
WScript.Echo(undefined); // This will print: foo
undefined , NaN 및 Infinity 는 미리 초기화 된 "수퍼 글로벌"변수의 이름 일뿐입니다. 런타임에 초기화되며 동일한 이름을 가진 일반 전역 또는 로컬 변수로 재정의 될 수 있습니다.
이제 null로 동일한 작업을 시도해 보겠습니다 .
var null = "foo"; // This will cause a compile-time error
WScript.Echo(null);
이런! null , true 및 false 는 예약 된 키워드입니다. 컴파일러에서 변수 또는 속성 이름으로 사용할 수 없습니다.
또 다른 차이점은 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
또한 null 및 undefined 가 숫자 컨텍스트에서 처리되는 방식에 중요한 차이가 있습니다 .
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 는 진정한 "nothing"이고 숫자 컨텍스트에서 사용하려고하면 NaN ( "not a number")이됩니다.
참고 널 (null)을 하고 정의되지 않은 에서 특별한 치료를받을 ==
및 !=
사업자,하지만 당신은 진정한 숫자의 평등을 테스트 할 수 있습니다 와 B 표현과를 .(a >= b && a <= b)
tl; dr
null
객체라는 것을 알고있는 변수를 설정하는 데 사용 합니다.
undefined
유형이 혼합 된 변수를 설정하는 데 사용 합니다.
이것은 5 개의 프리미티브와 객체 유형을 모두 사용하는 것이며, 이는 undefined
또는의 «사용 사례»간의 차이점을 설명합니다 null
.
끈
변수가 문자열 일 뿐이고 모든 수명주기는 규칙에 따라 다음과 같이 초기화 할 수 있습니다 ""
.
("") ? true : false; // false
typeof ""; // "string";
("Hello World") ? true : false; // true
typeof "Hello World"; // "string"
번호
모든 수명주기 동안 변수가 숫자 일 뿐이라는 것을 알고 있다면 규칙에 따라 다음과 같이 초기화 할 수 있습니다 0
(또는 NaN
사용 0
에있어 중요한 값인 경우 ).
(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"
참고 : null의 현명한 사용 은 Object가 always 이고 return 이기 때문에 Object 의 잘못된 버전이 됩니다. 즉, Object 및 null 유형 모두에 대해 일관된 값을 반환합니다.true
typeof null
object
typeof myVarObject
모두
변수에 혼합 된 유형 (모든 수명주기 동안 모든 유형)이 있다는 것을 알고있는 경우 규칙에 따라이를 undefined
.
null
"값 없음"을 의미하는 특수 값입니다. 'object'를 반환 null
하기 때문에 특별한 객체 typeof null
입니다.
반면에 undefined
, 변수가 선언되지 않았거나 값이 제공되지 않았 음을 의미합니다.
JavasSript에는 5 개의 기본 데이터 유형 String, Number, Boolean, null 및 undefined가 있습니다. 간단한 예를 들어 설명하겠습니다.
간단한 기능이 있다고합시다
function test(a) {
if(a == null){
alert("a is null");
} else {
alert("The value of a is " + a);
}
}
위의 함수에서도 if (a == null)은 if (! a)와 동일합니다.
이제 매개 변수를 전달하지 않고이 함수를 호출하면
test(); it will alert "a is null";
test(4); it 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 값을 할당했습니다.
자바 스크립트에서 변수를 선언하면 값이 할당됩니다 undefined
. 이는 변수가 변경되지 않았으며 나중에 어떤 값도 할당 할 수 있음을 의미합니다. 또한 선언 할 때이 변수가 보유 할 값을 모른다는 것을 의미합니다.
이제 명시 적으로 변수를 할당 할 수 있습니다 null
. 변수에 값이 없음을 의미합니다. 예를 들어-어떤 사람들은 중간 이름이 없습니다. 따라서 그런 경우에는 사람 객체의 middlename 변수에 null 값을 할당하는 것이 좋습니다.
이제 누군가가 person 객체의 middlename 변수에 액세스하고 있고 값이 있다고 가정합니다 undefined
. 그는 개발자가이 변수를 초기화하는 것을 잊었는지 또는 값이 없는지 알 수 없습니다. 값이있는 경우 null
사용자는 middlename에 값이없고 변경되지 않은 변수가 아니라는 것을 쉽게 추론 할 수 있습니다.
차이점을 이해하는 가장 좋은 방법은 먼저 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.
이 이러한 삼가지 경우 사이에 의미의 차이이며, 자바 스크립트는 두 개의 서로 다른 값으로 후자의 두 사례를 구별 null
하고 undefined
. 이러한 의미를 전달하기 위해 이러한 값을 자유롭게 사용할 수 있습니다.
그렇다면 이러한 철학적 기반으로 인해 발생하는 JavaScript 관련 문제는 무엇입니까?
이니셜 라이저없이 선언 된 변수
undefined
는 의도 한 값에 대해 아무 말도하지 않았기 때문에 값을 가져옵니다 .let supervisor; assert(supervisor === undefined);
설정되지 않은 개체의 속성
undefined
은 해당 속성에 대해 아무 말도하지 않았기 때문에 평가됩니다 .const dog = { name: 'Sparky', age: 2 }; assert(dog.breed === undefined);
null
와undefined
브렌던 아이크 그렇게 말했기 때문에 서로 "비슷한"입니다. 그러나 그들은 서로 동등하지 않습니다.assert(null == undefined); assert(null !== undefined);
null
그리고undefined
고맙게도 다른 유형이있다.null
유형에 속하는Null
및undefined
유형에Undefined
. 이것은 사양에 있지만typeof
여기서 반복하지 않을 기이함 때문에 결코 알 수 없습니다.반환 된 내용에
undefined
대해 아무것도 모르기 때문에 명시적인 return 문없이 본문 끝에 도달하는 함수는 반환됩니다.
그건 그렇고, 자바 스크립트에는 다른 형태의 "무 (nothingness)"가 있습니다 (철학을 공부 한 것이 좋습니다 ....)
NaN
- 선언 된 적이없는 변수를 사용하고
ReferenceError
- 시간적 데드 존에서
let
또는const
정의 된 로컬 변수를 사용 하고ReferenceError
희소 배열의 빈 셀. 예, 정의되지 않은
undefined
것과 비교하더라도 그렇지===
않습니다.$ node > const a = [1, undefined, 2] > const b = [1, , 2] > a [ 1, undefined, 2 ] > b [ 1, <1 empty item>, 2 ]
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을 할당합니다.
를 들어 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();
JavaScript에서 Null과 undefined는 모두 값이 없음을 나타냅니다.
var a = null; //variable assigned null value var b; // undefined
사실에도 불구하고 둘 다 값이 없기 때문에 존재하지만 정의되지 않음은 실제로 변수가 초기화되지 않았 음을 의미합니다. 아무것도 반환하지 않는 함수와 값이 제공되지 않은 함수 매개 변수, 정의되지 않은 값이 반환됩니다. 완전 항등 연산자 ===를 사용하여 null과 undefined를 구분합니다.
참조 : http://www.thesstech.com/javascript/null-and-undefined
OK, 우리는 우리가들을 때 혼란을 얻을 수 null
및 undefined
하지만,하자가 간단, 둘은 시작 falsy 그들 유의 한 차이가 몇 만들고, 여러 가지면에서 비슷하지만 자바 스크립트의 이상한 부분, 예를 들어 대해서 typeof는 null
것입니다 'object'
동안 대해서 typeof가 undefined
있다 'undefined'
.
typeof null; //"object"
typeof undefined; //"undefined";
하지만 ==
아래와 같이 확인하면 둘 다 허위임을 알 수 있습니다 .
null==undefined; //true
또한 null
객체 속성 또는 기본 요소에 undefined
할당 할 수 있지만 단순히 아무것도 할당하지 않음으로써 달성 할 수 있습니다.
차이점을 한눈에 보여주기 위해 빠른 이미지를 만듭니다.
typeof는 undefined를 반환하므로 undefined는 null이 이니셜 라이저이므로 변수가 객체가 없음을 나타내는 유형입니다 (사실상 Javascript의 모든 것이 객체입니다).
이 주제에 대한 Ryan Morr의 철저한 기사에 따르면 ...
"일반적으로 변수 나 속성에 값이 아닌 값을 할당하거나 함수에 전달하거나 함수에서 반환해야하는 경우 null이 거의 항상 최상의 옵션입니다. 간단히 말하면 JavaScript는 undefined를 사용하고 프로그래머는 null을 사용하십시오. "
Null 및 Undefined의 영원한 심연 탐험을 참조하십시오.
자바 스크립트에서 모든 변수는 키 값 쌍으로 저장됩니다. 각 변수는 variable_name : variable_value / reference 로 저장됩니다 .
정의되지 않음 은 변수에 메모리 공간이 주어졌지만 값이 할당 되지 않았 음을 의미합니다. 모범 사례로이 유형을 할당으로 사용해서는 안됩니다.
이 경우 코드의 나중 지점에서 변수에 값이 없도록 지정하는 방법은 무엇입니까? null 유형을 사용할 수 있습니다.이 유형 은 값이없는 동일한 것을 정의하는 데 사용되는 유형이지만 정의되지 않은 것과 동일하지 않습니다.이 경우 실제로 메모리에 값이 있습니다. 그 값은 null입니다.
둘 다 비슷하지만 사용법과 의미가 다릅니다.
바닐라 자바 스크립트 (JS)를 처음부터 배우려고 할 때 알아두면 좋은 점 null
과 매우 미묘한 차이를 추가하고 싶습니다 undefined
.
null
는 JS에서 예약 된 키워드이며은undefined
현재 런타임 환경의 전역 개체에 대한 변수입니다.
코드를 작성하는 동안,이 차이는 모두 같은 식별하지 않습니다 null
및 undefined
항상 자바 스크립트 구문의 RHS에 사용됩니다. 그러나 표현의 LHS에서 사용하면이 차이를 쉽게 관찰 할 수 있습니다. 따라서 JS 인터프리터는 아래 코드를 오류로 해석합니다.
var null = 'foo'
아래 오류가 발생합니다.
포착되지 않은 구문 오류 : 예기치 않은 토큰 null
실제 생활에서는 권장하지 않지만 아래 코드는 성공적으로 실행됩니다.
var undefined = 'bar'
이것은 undefined
전역 개체 (클라이언트 측 JS의 경우 브라우저 창 개체)의 변수 이기 때문에 작동합니다.
차이 undefined
와 null
최소이지만, 차이가있다. 값이 undefined
초기화되지 않은 변수입니다 . 값이 null
명시 적으로 값이 지정된 null
변수입니다. 이는 변수가 값을 갖지 않도록 명시 적으로 설정되었음을 의미합니다. 당신이 비교하는 경우 undefined
와 null
사용하여 null==undefined
표현을, 그들은 동일합니다.
기본적으로 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
Undefined 그것은 당신이 출력으로 얻는 것입니다.
지금,
x=5;
y=null;
z=x+y;
출력으로 5 를 얻을 것 입니다. 이것이 Undefined 와 null 의 주요 차이점입니다.
null- 할당 값이며 변수와 함께 사용되어 값이 없음을 나타냅니다 (객체).
undefined- 어떤 값도 할당되지 않은 변수이므로 JavaScript는 undefined를 할당합니다 (데이터 유형).
선언되지 않음-변수가 전혀 생성 되지 않은 경우 선언되지 않음이라고합니다.
변수가 초기화되지 않으면 정의되지 않습니다. undefined는 객체가 아닙니다. 예 : var MyName; console.log (typeof MyName);
개발 도구에서 콘솔 로그를 확인하면 정의되지 않은 상태로 인쇄됩니다.
null is aa object. 일부 변수를 null로 설정하려면 null이 사용됩니다 .null 변수가 있지만 값을 알 수 없습니다. 변수에 프로그래밍 방식으로 할당해야합니다. null은 자동으로 초기화되지 않습니다.
예 : var MyName = null; console.log (typeof MyName); 개발 도구에서 csole 로그를 확인하면 개체가됩니다.
내 의견을 추가하기 위해-
C ++와 같은 컴파일 된 언어의 경우에만 선언되고 어디에도 사용되지 않는 변수는 최적화 컴파일러에 의해 제거됩니다 [또는 IDE에서 경고 플래그가 지정됨]. 이는 궁극적으로 메모리가 할당되지 않기 때문에 변수가 존재하지 않음을 의미합니다.
자바 스크립트 인터프리터의 경우 [나는 추측한다] 변수는 값이 주어진 지점부터 만 존재하는 것으로 취급됩니다. 그 이전에는 유형이 "정의되지 않음"이며 이에 대한 메모리가 할당되지 않습니다. 그리고 그 유형은 정의되지 않았습니다.
자바 스크립트는 널 이다 어드레스를 나타내는 값이지만 아직 아무것도 [존재 참조]에 해당 주소를 가리킨다. 그럼에도 불구하고 그 가치.
Null은 항상 메모리에 존재하는 알 수없는 객체이지만 undefined는 그렇지 않습니다.
'Nice programing' 카테고리의 다른 글
Objective-C의 상수 (0) | 2020.09.27 |
---|---|
치명적인 오류 : Python.h : 해당 파일 또는 디렉터리가 없습니다. (0) | 2020.09.27 |
그룹화 함수 (tapply, by, 집계) 및 * apply 제품군 (0) | 2020.09.27 |
Android Studio : jar를 라이브러리로 추가 하시겠습니까? (0) | 2020.09.27 |
Android Studio에서 "Android SDK를 선택"하려면 어떻게합니까? (0) | 2020.09.27 |