어제 동료들과 놀았는데, typeof에 관한 코딩 질문이 있었습니다. 저는 typeof에 대한 지식 요약을 여기에서 여러분과 공유하고 싶습니다. 잘못된 점이 있으면 지적해 주시면 함께 발전해 나갈 수 있습니다.
코드는 다음과 같습니다.
<!DOCTYPE html> <head> <title>typeof</title> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/> </head> <body> <script> var a= a||null; var b= c||null; var c= typeof f; console.log(a); console.log(b); console.log(c); </script> </body> </html>
그렇다면 이 코드를 실행하면 크롬 디버거는 무엇을 인쇄할까요?
렌더링을 확인하세요
왜 이런 결과가 나오나요?
먼저 위 그림의 두 null을 분석해 보세요
Javascript는 코드를 실행하기 전에 사전 구문 분석(호이스팅)을 수행하기 때문입니다.
호이스팅이란?
즉, JavaScript에서는 함수의 어느 위치에서든 여러 개의 var 문을 선언할 수 있습니다. 이 문은 함수 상단에서 선언된 것처럼 작동하며 var로 선언된 변수의 초기 값은 정의되지 않습니다. 이러한 동작을 호이스팅이라고 합니다.
따라서 위 코드를 실행하기 전에 Javascript는 먼저 모든 var 변수(a, b, c)를 사전 구문 분석(호이스팅)합니다. a||null이 실행되면 | 이므로 결과는 null입니다.
c||null은 사실입니다.
다시 살펴보겠습니다. 왜 typeof f가 정의되지 않았나요? f가 정의되지 않은 경우 오류가 보고되어야 하지 않나요?
예, 정의되지 않은 변수를 사용하면 브라우저에서 오류를 보고합니다.
그러나 typeof를 사용하여 정의되지 않은 변수를 결정하는 경우 undefound가 반환됩니다.
값 유형을 결정하기 위해 typeof가 사용하는 메커니즘은 무엇인가요? 요약은 다음과 같습니다.
1. 숫자 유형 값의 경우 typeof는 숫자를 반환합니다. 참고: NaN은 JavaScript에서 숫자가 아닌 특별한 값을 나타내기 때문에 숫자 유형이기도 합니다.
2. 문자열 유형 값의 경우 typeof는 문자열을 반환합니다.
3. 부울 유형 값의 경우 typeof는 부울을 반환합니다.
4. 객체, 배열 및 null의 경우 typeof는 객체를 반환합니다
5. 함수 유형의 경우 typeof는 함수를 반환합니다
6. 피연산자가 정의되지 않은 경우(존재하지 않거나 값이 할당되지 않은 경우) 정의되지 않은 값이 반환됩니다.