너무너무 멋져 눈이눈이 부셔
[JS] 자바스크립트 데이터 타입(자료형) 본문
- 원시 타입 (primitive data type)
- number
- string
- boolean
- null
- undefined
- symbol (New in ECMAScript 6)
- 객체 타입 (Object data type)
- object
원시 타입
원시타입은 변경 불가능한 값이며, 값에 의한 전달이다.
number
숫자 타입은 배정밀도 64비트 부동소수점( -(2^53 -1) 와 2^53 -1 사이의 숫자값 ) 형식을 따른다. 즉, 모든 수를 실수로 처리한다.
- Infinity : 양의 무한대
- -Infinity : 음의 무한대
- NaN : Not-a-Number, 산술 연산 불가
var binary = 0b01000001; // 2진수
var octal = 0o101; // 8진수
var hex = 0x41; // 16진수
console.log(binary); // 65
console.log(octal); // 65
console.log(hex); // 65
console.log(binary === octal); // true
console.log(octal === hex); // true
2진수,8진수 등의 데이터 타입이 없어서 참조 시 모두 10진수로 해석된다.
string
문자열은 변경할 수 없다.
var str = 'Hello';
str = 'world';
기존 'Hello'가 수정되는 것이 아니라 새로운 'world'를 메모리에 생성하는 것이다. 이때, 둘 다 메모리에 존재하고, str 변수가 'Hello'를 가리키고 있다가 'world'를 가리키도록 변경한 것.
- 인덱스(순서)를 통해 접근 가능
- str[0] = 'N'으로 변경해도 반영되지 않는다(에러 발생 안함)
템플릿 리터럴(ES6부터)
백틱(``)을 통해 런타임 때 문자열로 변환.
// ES6: 표현식 삽입
console.log(`My name is ${first} ${last}.`);
boolean
불리언 타입 값은 논리적 참 거짓을 나타내는 true와 false가 있다.
비어있는 문자열과 null, undefined, 숫자 0은 false로 간주된다.
undefined
선언 이후에 값을 할당하지 않은 변수.
- 자바스크립트에서 변수 선언 시 암묵적으로 undefined로 초기화.
- 개발자가 의도하지 않은 빈 값.
null
- 변수에 값이 없다는 것을 의도적으로 명시할 때 사용한다.
- 변수가 기억하는 메모리 주소의 참조 정보를 제거하는 것이며, 엔진이 이 영역에 대해 가비지 콜렉션을 수행한다.
- typeof 연산자로 null을 연산하면 object가 나온다. 이는 자바스크립트 설계상 오류라고 개발자가 인정했다.
- 따라서 typeof가 아니라 일치연산자 ===로 타입을 확인해야 한다.
symbol(ES6)
다른 값과 중복되지 않는 유일무이한 값.
-Symbol 함수를 호출하여 생성.
- 일반적으로 이름이 충돌할 일이 없는 객체의 유일 속성 키를 만들기 위해 사용.
- 이때 생성된 값은 외부에 노출되지 않는다.
객체 타입
자바스크립트는 객체 기반의 언어이며, 거의 모든것이 객체이다.
객체는 데이터와 데이터에 대한 동작(절차, 방법, 기능)을 모두 포함할 수 있는 개념적 존재.
이후 구체적으로 서술.
왜 데이터 타입이 필요한가요?
1. JS엔진은, 값을 저장할 때 데이터 타입에 따라 정해진 크기의 메모리 공간을 확보한다.
2. 값을 참조할 때 한 번에 읽어 들여야 할 메모리 공간의 크기를 결정해야 한다.
3. 메모리에서 읽어 들인 2진수를 어떻게 해석해야하는지 결정할 때 필요하다.
자바스크립트는 동적 타이핑 언어
- 변수에 할당되어 있는 값을 통해 추론해서 변수 타입이 동적으로 결정.(타입 선언 x)
단점
- 유연성은 높지만 신뢰성이 떨어짐
- 암묵적으로 타입이 변환될 때도 있음.
- 값 변경에 의해 타입도 변경될 수 있다.
의도치 않은 side Effect가 발생할 수 있다!
-> 해결 방안
1. 변수는 필요한 경우에 제한적으로 사용해라 : 변수 개수가 많으면 오류 확률도 높아짐
2, 변수 유효범위(스코프)는 좁게 만들어서 부작용을 줄여라
3. 전역변수 사용 지양 : 프로그램 복잡성을 증가
4. 변수보다 상수를 사용해서 값의 변경 억제
5. 변수 네이밍을 의미를 명확히 파악할 수 있도록 하라.
'멋있는 JavaScript' 카테고리의 다른 글
[JS] 자바스크립트 표현식, 문 (expression and statement) (0) | 2024.03.29 |
---|---|
[JS] 자바스크립트 연산자 (0) | 2024.03.28 |
[JS] 자바스크립트 문법 - 기초 문법과 변수 feat deep dive (1) | 2024.03.28 |
[JS] 백준 16967 배열 복원하기 자바스크립트 node.js 풀이 (0) | 2024.03.28 |
[JS] 백준 1874 스택 수열 node.js 자바스크립트 풀이 (0) | 2024.03.19 |