JavaScript를 처음 배우기 시작했을 때
undefed가 꽤 새롭다고 느꼈습니다
다른 언어에는 없었기 때문입니다
. 비어 있음을 의미하는 null도 있었습니다
많은 학생들이 undefined와 null의 차이를 구분하지 못하는 것 같아요
오늘은 JavaScript에서 비어 있음을 의미하는 undefound와 null의 차이점을 정리하겠습니다
정의되지 않음과 null은 모두 JavaScript입니다.
의 기본 유형은 각각 하나의 유형 값만 가지며, 정의되지 않고 null이며 해당 유형과 이름이 동일합니다.
일반적으로 실제로는 이 두 값 사이에는 차이가 없습니다
var foo = undefined;
var foo = null;
그리고 표준에서는
console.log(null == undefined) // true
(그러나 null !== undefined
)
는 부울 값으로 변환되어 false
if(!undefined){ console.log(1);//1}if(!null){ console.log(1);//1}
그러나 실제로는 차이가 있습니다
이 코드 줄을 먼저 살펴보겠습니다
console.log(undefined in window);// trueconsole.log(null in window);// false
이것이 차이점입니다
null은 JavaScript의 키워드
이고 undefound는 window의 특수 속성입니다(NaN 및 Infinity와 동일)
ES5 undefed는 읽기 전용 속성이 되지만 여전히 다음과 같은 불합리한 사항이 있습니다
function fn(){ var undefined = 1;// 注意:前方高能 console.log(undefined);// 1} fn();
보세요, unundefined는 키워드가 아니기 때문에 지역 변수에서 사용할 수 있습니다. 선언은 undefine(말문이 없음)
Strict 모드에 있더라도
function fn(){ "use strict"; var undefined = 1; console.log(undefined);// 1} fn();
이렇게 터무니없는 코드를 작성하면 안 됩니다.
수학적 연산을 수행할 때 차이점이 있습니다
console.log(undefined + 1); //NaNconsole.log(null + 1); //1
정의되지 않은 연산은 NaN
으로 변환되고 null은 0으로 변환됩니다
JavaScript에는 null을 나타내는 두 개의 값이 있다는 것이 이해가 됩니다
js 아버지인 Brendan Eich는 원래 Java처럼 null만 사용하여 설계했습니다
. 그러나 그는 js에 두 개의 기본 값과 참조가 있다고 생각했습니다.
값을 사용하고 이상한 것을 표현하기 위해 객체를 사용typeof null === 'object'
하고 null 변환 숫자 0 때문에 많은 버그를 찾기가 어렵습니다
그래서 그는 정의되지 않은
정의되지 않은 값은 누락된 값을 의미합니다
null은 빈 객체를 의미합니다
하지만 지금은 이렇게 사용하지 않습니다
undefound는 변수가 초기화되지 않았으며 값이 없음을 의미합니다
null은 변수가 초기화되었고 값이 "null 값"임을 의미합니다.
이 문장을 이해할 수 있을지 모르겠습니다
예를 들어 이런 상황에서는
변수를 선언하고, 엔진은 함수를 미리 컴파일하는 동안 정의되지 않은var a;
기본값을 할당하며 반환 값이 없으면 기본값은 정의되지 않습니다function a(){}
존재하지 않는 개체 속성에 액세스합니다. 기본값은 정의되지 않습니다.var obj = {};obj.a;
실제 매개변수가 지정되지 않으며, 기본 매개변수 값이 정의되지 않습니다var a = function(a){};a();
이며 우리가 원하는 것입니다. to use is null
예:
빈 개체 만들기var obj = Object.create(null);
이벤트 바인딩 해제demo.onclick = null;
undefine == null –> undefine === null –> 🎜>
부울로 변환하면 정의되지 않음과 null은 모두 거짓입니다