미정의 판단 및 null:
<span style="font-size: small;">var tmp = undefined; if (tmp== undefined) { alert("null or undefined"); } </span>
<span style="font-size: small;">var tmp = undefined; if (tmp== null) { alert("null or undefined"); }</span>
설명: null==undefine
But:
null !== undefine
그럼 둘의 차이점은 무엇인가요?
null
객체이지만 비어 있습니다. 객체이기 때문에 typeof null 은 'object' 를 반환합니다.
null은 JavaScript 예약 키워드입니다.
null의 값은 수치 연산에 참여할 때 자동으로 0으로 변환됩니다. 따라서 다음 표현식은 계산 후 올바른 값을 얻습니다.
Expression: 123 + null 결과 값: 123
Expression: 123 * null 결과 값: 0
정의되지 않음
undefine은 전역 개체(창)의 특수 속성이며 해당 값은 정의되지 않습니다. 그러나 typeof undefound 는 'undefine' 을 반환합니다.
정의되지 않음은 특별한 의미를 가지고 있지만 실제로는 속성이며 전역 개체(창)의 속성입니다.
alert('undefined' in window);//输出:true var anObj = {}; alert('undefined' in anObj); //输出:false
이를 통해 정의되지 않음이 window 개체의 속성이지만 anObj 개체의 속성이 아님을 알 수 있습니다.
참고: 정의되지 않음은 특별한 의미를 갖는 속성이지만 JavaScript에서는 예약어가 아닙니다.
정의되지 않음이 수치 계산에 참여하는 경우 결과는 NaN이어야 합니다.
그런데 NaN은 전역 개체(창)의 또 다른 특수 속성이며 Infinity도 마찬가지입니다. 이러한 특수 속성 중 어느 것도 JavaScript용으로 예약된 키워드가 아닙니다!
정의되지 않은 성능 향상
프로그램에서 정의되지 않은 값을 사용할 때 실제로는 window 개체의 정의되지 않은 속성을 사용합니다.
마찬가지로 변수를 정의했지만 초기 값을 할당하지 않은 경우, 예를 들면 다음과 같습니다.
var aValue;
이때 JavaScript는 소위 사전 컴파일 중에 window.undefine 속성에 대한 참조로 초기 값을 설정합니다.
따라서 변수나 값을 정의되지 않은 것과 비교할 때 실제로는 창 개체의 정의되지 않은 속성과 비교됩니다. 이 비교 과정에서 JavaScript는 window 개체의 'undefine'이라는 속성을 검색한 다음 두 피연산자의 참조 포인터가 동일한지 비교합니다.
윈도우 객체는 속성값이 많기 때문에 undefine과의 비교 시마다 윈도우 객체의 정의되지 않은 속성을 검색하는데 시간이 걸립니다. 이는 정의되지 않은 항목과 자주 비교해야 하는 함수에서 성능 문제가 될 수 있습니다.
그 중 정의되지 않은 지역 변수를 정의할 때 초기 값은 window.undefine 속성 값에 대한 참조가 됩니다. 새로 정의된 지역 변수가 정의되지 않은 함수 범위에 존재합니다. 이후 비교 작업에서는 자바스크립트 코드를 작성하는 방식에는 변화가 없지만 비교 속도는 매우 빠르다. 범위 내의 변수 개수는 창 개체의 속성보다 훨씬 적기 때문에 변수 검색 속도가 크게 향상됩니다.
이것이 바로 많은 프런트엔드 JS 프레임워크가 정의되지 않은 로컬 변수를 자체적으로 정의하는 이유입니다!
위 내용은 JavaScript에서 null과 정의되지 않은 사용법의 차이점에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!