[JavaScript] 데이터 타입

soyeon·2022년 7월 4일
0

데이터 타입

기본적인 용어

literal

: 특정 값을 표현하기 위해서 사람이 이해할 수 문자, 약속된 기호를 이용하는 notation(표기법)

3 		-> 숫자 literal
'Hello' -> 문자 literal
"Hello" -> 문자 literal
`Hello` -> 문자 literal (ES6부터 새롭게 표현)
null 	-> null literal (null이라는 의미를 나타낸다. 개발자가 직접 사용)
undefined -> undefined literal 
			(변수가 있는데 아직 초기화 되지 않았다. JavaScript engine이 사용)
{'key':'value'} -> 객체 literal
[1, 2, 3] 		-> 배열 literal
function(){}	-> 함수 literal

statement (문)

: 프로그램의 최소 실행 단위
프로그램은 statement의 집합이라고 할 수 있다. statement의 순서를 정하는 것이 프로그래밍이다.

var sum = 1 + 2;

: 하나의 statement이다. var, sum, 1, +, 2, ; 각각의 요소들 하나를 token이라고 부른다.

;
: statement의 종결을 나타낸다.
JavaScript애서는 ASI를 제공해서 생략해도 알아서 붙여준다. 명확한 코드를 위해서 세미콜론을 생략하지 말아야 한다.
{}
: 중괄호 자체가 self closing 의미를 가지고 있다.

expression (식)

: 평가 과정을 통해 값으로 인식되는 구문

데이터 타입

: 총 7개의 데이터 타입이 존재한다.

dynamic typing(동적 타이핑)
: JavaScript는 변수에 값이 할당되는 시점에 Type이 결정된다.
=> Type Inference (타입 추론)

Primitive type (원시 타입)

number type

: 정수, 실수를 구분하지 않는다.
내부적으로 모든 숫자는 64-bit 실수로 처리한다.

let myVar = 1.0;

console.log(myVar === 1);  // 타입과 값이 일치하는지 확인 할 때 사용한다.
console.log(3/2);  // 모두 실수로 처리한다.

실행 결과 : 
true
1.5
  • infinity : 양의 무한대
  • -infinity : 음의 무한대
  • NaN : not a number. 산술 연산이 불가하다. (숫자가 아님을 의미하지만 number type이다.)

string type

: ' ' (기본형태), " ", ``

  • 백틱
    : 멀티 라인 문자열 표현, Expression Interpolation (표현식 삽입)
let name1 = '홍길동';

console.log('내 이름은 ' + name1 + '입니다.');
console.log(`내 이름은 ${name1}입니다.`);

실행 결과 :
내 이름은 홍길동입니다.
내 이름은 홍길동입니다.

boolean type

: true, false

undefined type

: undefined

null type

: null

symbol type (ES6부터 등장)

: symbol 값
Unique한 값이고, 눈으로 확인이 되지 않는다.(출력을 할 수 없다.)
Symbol()을 이용하여 생성할 수 있다. 심볼을 다른 타입으로 형변환 할 수 없다. 존재하는지 조건문으로 확인은 가능하다. global symbol registry를 사용하지 않는다.

const mySymbol = Symbol();

console.log(typeof mySymbol);
console.log(mySymbol);  // 해당 심볼의 값을 알 수가 없다.

const mySymbol1 = Symbol();
const mySymbol2 = Symbol();

console.log(mySymbol1 === mySymbol2);  // unique한 값을 만들어낸다.

실행 결과 :
symbol
Symbol()
false
  • descriptor (꼬리표)
    : 심볼에 인자를 넣어도 다른 값이 나온다. 심볼값에는 영향을 주지 않는다.
const mySymbol1 = Symbol('소리없는 아우성');  // 인자를 줄 수 있다.
const mySymbol2 = Symbol('소리없는 아우성');

console.log(mySymbol1 === mySymbol2);
console.log(mySymbol1.description);

실행 결과 :
false
소리없는 아우성
  • Symbol.for()
    : key를 이용해 심볼을 찾는다.
    global symbol registry라는 곳이 있다. 일단 거기에서 해당 인자로 키로 가지고 있는 symbol을 찾는다. 존재하지 않으면 symbol을 만들고 global symbol registry에 등록하고 symbol을 리턴한다.
const s1 = Symbol.for('mySymbol');
const s2 = Symbol.for('mySymbol');

console.log(s1 === s2)

실행 결과 : true
  • Symbol.keyFor()
    : 심볼을 이용해서 key를 찾는다.
console.log(Symbol.keyFor(s2));

실행 결과 : mySymbol
  • 심볼 사용 예시
const Direction = {
    'UP': Symbol(),
    'DOWN': Symbol(),
    'LEFT': Symbol(),
    'RIGHT': Symbol()
}
let myDirection = Direction.DOWN;

if(myDirection == Direction.DOWN){
    
}

Reference type (너무 많아서 나중에)

object type

0개의 댓글