다음 코드를 보았습니다.
function test(data) {
if (data != null && data !== undefined) {
// some code here
}
}
JavaScript를 처음 접했지만 여기에서 읽은 다른 질문에서이 코드가 의미가 없다는 인상을 받았습니다.
이외의 컨텍스트에서 정의되지 않은 변수에 액세스하면 오류가 발생합니다typeof
.
업데이트 : 위 의 (따옴표) 답변이 잘못되었을 수 있습니다. «undefined variable» 대신 «declared variable» 이어야합니다 .
내가 알았 듯이 Ryan ♦ , maerics 및 nwellnhof 의 답변 에서 함수에 인수가 제공되지 않은 경우에도 인수에 대한 변수는 항상 선언됩니다. 이 사실은 또한 아래 목록의 첫 번째 항목이 잘못되었음을 증명합니다.
내가 이해 한 바에 따르면 다음과 같은 시나리오가 발생할 수 있습니다.
이 함수는 인수없이 호출되었으므로data
정의되지 않은 변수 를 만들고 에 오류가 발생했습니다data != null
.이 함수는 인수로
null
(또는undefined
)으로 특별히 호출 되었습니다.이 경우data != null
이미 내부 코드를 보호하여&& data !== undefined
쓸모가 없습니다.함수는 그 소소 모두 통과 할 경우에 비 - 널 인수로 불렸다
data != null
및data !== undefined
.
Q : 이해가 정확합니까?
Firefox 콘솔에서 다음을 시도했습니다.
--
[15:31:31.057] false != null
[15:31:31.061] true
--
[15:31:37.985] false !== undefined
[15:31:37.989] true
--
[15:32:59.934] null != null
[15:32:59.937] false
--
[15:33:05.221] undefined != null
[15:33:05.225] false
--
[15:35:12.231] "" != null
[15:35:12.235] true
--
[15:35:19.214] "" !== undefined
[15:35:19.218] true
나는 data !== undefined
후 data != null
가 쓸모없는 경우를 알아낼 수 없다 .
if(data)
전달할 수 없습니다 . false
0
data
if(typeof someUndefVar == whatever) -- works
, 및 if(someUnderVar) -- error
.
data !== null && data !== undefined
이고, data != null
이는에 해당합니다 data != undefined
. 이 조건에 대한 자세한 명시 적의로 모두 것을 간과하기 쉬운 것입니다 반면, 이전 형태는 선호되는 경향 null
과 undefined
이후 두 조건을 확인하고있다.
undefined
는 IMO 코드 냄새입니다. 와 같은 보호 된 키워드가 아니며 null
정의되지 않은 변수입니다. 이것은 완전히 유효하며 코드를 깨뜨릴 것입니다 :undefined = 1
if (data)
.data
변수가 true로 평가 되는지 확인하는 니모닉 자바 스크립트 방법 입니다.undefined
,,null
false, 0, 빈 문자열, 빈 배열 및 속성이없는 (?) 객체는 false로 평가되며 나머지는 true입니다.