자바스크립트(javascript) - 타입(type) 개념, 실수를 줄이자
자바스크립트로 개발하다 보면 변수 선언하고 값을 넣고 이것을 이용해 개발을 진행을 한다.
이렇게 사용을 하면서 의심 없이 타입에 관련된 깊은 내용들을 알지 못한 채 사용을 해왔다.
그냥 이렇게 사용하는 거구나 라는 생각과 함께...
그러다가 오류가 발생이 되거나 이해가 되지 못하는 상황이 발생했을 때도
다른 방법을 이용해서 해결하려고 했지 왜? 이럴까?라는
의구심 없이 계속 진행해왔던 것 같다.
이러는 차원에서 여태껏 개발을 해오면서 반성하는 의미와 좀 더 개발언어에 대해서
깊이 알아야겠다는 다짐과 함께 공부한 것을 남겨본다.
자바스크립트에서는 타입이 총 6개인데
- null
- undefined
- boolean
- number
- string
- object
이렇게 총 6개이다. 그런데 ES6에서 추가된 타입이 하나가 있다.
바로 symbol이라는 타입이다. 그래서 자바스크립은 총 7개의 타입이 존재한다.
이 중 유심히 봐야 할 건 null 타입인데... 이게 잘못 알았다간 오해하면서 사용하기 쉬운 타입이다.
예제를 통해서 잠깐 확인해보자.
예제)
console.log(typeof undefined); // 'undefined'
console.log(typeof true); // 'boolean'
console.log(typeof 10); // 'number'
console.log(typeof 'hello'); // 'string'
console.log(typeof {name:'영수'}); // 'object'
console.log(typeof null); // ?????
각 console.log로 확인을 해보면 우리가 알고 있는 예상 했다시피 나온다.
그런데 마지막 null을 확인해보면 무엇이 나오는가? 바로 object이다..???? 이상하네?
null은 뜻을 얘기하자면.. 없는 것? 존재하지 않는 것?
초기화할 때 사용하는 것?
boolean 의미로 따져봤을 땐 없는 값이니 '거짓' 등등 이런 결과가 나와야 하는 게 정상인데
자바스크립트에서는 아니다... object로 찍히니... 대충 알고 있다간 오해를 살만하다..
암튼 여기서 알아야 할 것은 null을 없는 형태,
또는 거짓, 또는 undefined 등 이런 느낌으로 알았다간 실수를 할 수 있으니
null 은 object라는 것을 알아야 한다는 것이다.
이게 왜? object 나라고 물으면... 난 대답을 할 수가 없다.
찾아보면 자바스크립트의 버그라고 얘기하는 곳도 있고,
원래 이렇게 만들었으니 그냥 알고 잘 쓰는 방법밖엔...
null의 타입이 그냥 null이라고 나왔더라면 좋았을 것을....
자바스크립트에선 function 키워드를 이용하여 함수를 만들어서 사용을 하는데
이 함수는 자바스크립트에서 객체이다.
나도 이 말을 들었을 땐 음.. 그렇구나 객체구나 하고 아무런 의심 없이 함수를 만들어서
사용만 해왔지 확인을 하지 못했는데 이 내용은 알아도 그만 아니여도 그만 또는 이 것을 알면
유용하게 쓰일 수도 있으니
간단한 예제를 통해서 알아보자.
예제)
function A(name, age){
}
console.log(A.length); // ???
function B(name, age, sex){
}
console.log(B.length); // ???
이 console.log에는 무엇이 출력이 될까?
A.length 는 2가 출력이 되고, B.length 는 3이 출력된다.
무엇 때문에? 바로 함수에 매개변수에 따라 length가 결정이 된다.
즉, A는 2개의 매개변수를 받기 때문에 length가 2가 나왔고,
B는 3개의 매개변수를 받기 때문에 length가 3이 나온 것이다.
이 처럼 함수도 매개변수에 따라서 함수 자체에 length를 구할 수 있다.
꼭 배열의 length 구하는 것과 비슷하지 않은가?
암튼 자바스크립트라는 건 알면 알수록 새롭게 알아가는 것들이 많은 것 같다.
'web 언어 > HTML5 & CSS & Javascript' 카테고리의 다른 글
JS - 자바스크립트 Array 문자열 인덱스, 사용법, 좀 더 자세히... (0) | 2022.03.30 |
---|---|
JS - 오브젝트, 함수, 변수, 등등 존재 여부를 체크하는 방법 (0) | 2022.03.29 |
JS - 프로토타입 기반의 클래스 상속 (0) | 2022.03.26 |
JS - 프로토타입 박살내기! (0) | 2022.03.18 |
JS - Objects 객체에 대한 모든 것 - 5 (0) | 2022.03.11 |