본문 바로가기
Develop/JAVASCRIPT

자바스크립트 기초 - 데이터 타입(원시 타입, 객체 타입, typeof, instance, 타입변환, Undefined, Null)

by 걸어다니는 종합병원 2023. 8. 14.
반응형

데이터 타입 

데이터 타입 의미
원시(Primitive) 타입(기본) 원형 데이터
객체(Object) 타입(복합) 참조 데이터

자바스크립트는 숫자, 문자열, 진릿값, 객체 등의 데이터를 타입으로 분류한다.

 

원시타입

원시타입 의미
Boolean 진릿값 타입 true, false
String 문자열 타입 '토끼', '사과'
Number 숫자 타입 1, 2, 3, 100
Undefined 값 미정 undefined
Null 빈 값 null
Symbol  심볼 타입 Symbol()

메모리상의 데이터를 가르키는 걸 참조(Reference)라 한다.

const num = 100; //100을 참조
const text = '사자'; //'사자'를 참조
객체 타입 의미
Object 객체 타입 원시 타입을 제외한 모든 데이터(Array, Object, Date 등)

객체 타입은 원형 데이터가 아닌 다른 데이터를 참조하는 데이터이다.

const arr = [1, 2, 3];
const obj = { id : 1, name : '아기곰' };
const arrObj = [
	{id : 1, name : '아기곰'},
	{id : 2, name : '아빠곰'},
    {id : 3, name : '엄마곰'}
]

배열은 키가 각각의 데이터를 참조한다.


가변성과 불가변성

데이터 타입 특징
원시(Primitive) 타입 불가변성
객체(Object) 타입 가변성

원시 타입과 객체 타입의 차이는 데이터 값의 변환 가능 여부.

원시타입의 데이터를 변환할 수 없으므로 불가변성(immutable)이며, 객체 타입은 가변셩(Mutable)이다.

const arr = [1, 2, 3];
arr[0] = 4;

배열의 첫 번째 데이터에 4를 대입하면 1이 4로 변경된다.

이것이 가변성이다

let num = 100;
num = 20;

num 변수에 20을 대입하면 100이 20으로 바뀌는 것이 아니라, 20이라는 새로운 데이터를 참조한다. 

이것이 불가변성이다.


데이터 타입 확인 - typeof

구문 의미
typeof 데이터 데이터 타입을 확인

typeof는 데이터 타입 확인 연산자이다.

데이터 타입 결과
Undefined undefined undefined
Null object null
Boolean boolean true, false
String string '토끼', '호랑이'
Symbol symbol Symbol()
Number number 100, 200
Object(함수 제외) object [100,200,300], { id : 1, age : 100 }
함수 function function(){}, class MyClass{}
console.log(typeof true);
console.log(typeof 10);
console.log(typeof '아빠곰');
console.log(typeof null);
console.log(typeof undefined);
console.log(typeof Symbol());
console.log(typeof [100, 200, 300]);
console.log(typeof { id : 100, age : 200 });
console.log(typeof function(){
    console.log('function');
});
console.log(typeof class MyClass{});


객체 인스턴스(instance)

구문 의미
데이터 instanceof 객체 데이터가 객체의 인스턴스인지 확인
const today = new Date();
console.log(today instanceof Date);
console.log(today instanceof Object);
console.log(today instanceof Array);


값, 참조 전달

- 원시 타입과 객체 타입의 처리 이해

데이터 타입 데이터 전달 방식
원시(Primitive) 타입 값의 전달
객체(Object) 타입 참조의 전달

값에 의한 전달

let a = 100;
let b = a;
a = 500;
console.log(b);

 

참조에 의한 전달

let a = [100, 200, 300];
let b = a;
a[0] = 999;
console.log(b);

 

함수의 인수 역시 원시 타입은 값

객체 타입은 참조를 전달 함.

function fn1(x){
    x = x + 2;
}

let a = 100;
fn1(a);

console.log(a);


let b = [1, 2, 3];

function fn2(x){
    x[0] = 100;
}

fn2(b);
console.log(b)


데이터 타입 변환

- 숫자를 문자열로 변환하고 싶을 때

- 문자열을 숫자로 변환하고 싶을 때

메소드 의미 반환
Boolean(데이터) 데이터를 진릿값 타입으로 변환 Boolean
String(데이터) 데이터를 문자열 타입으로 변환 문자열
Number(데이터) 데이터를 숫자 타입으로 변환 숫자
parseInt(문자열) 문자열을 숫자(정수) 타입으로 변환 숫자
parseFloat(문자열) 문자열을 숫자(부동 소수점) 타입으로 변환 숫자
const result = 100 + Number('400');
console.log(result);

console.log(Boolean(1));
console.log(Boolean(0));
console.log(Boolean('아기곰'));
console.log(Boolean(''));

console.log(String('1'));

console.log(Number('1'));
console.log(Number(''));
console.log(Number('사자'));
console.log(Number(true));
console.log(Number(false));

 

데이터 타입이 자동으로 변환되는 것을 암시형 변환이라고 한다.

console.log(100 + '200');
console.log('200' - 100);
console.log( 1 == '1');

암시형 변환의 숫자 타입과 문자열 타입의 + 연산은 타입 위치에 따라서 결과가 봐뀐다.

데이터 타입을 비교 할 경우에는 ==이 아닌 ===을 사용하자.


정의되지 않은 데이터 - undefined

- 정의되지 않은 데이터를 알고 싶을 때

- 값이 없는 변수의 처리를 알고 싶을 때

원시타입 의미
Undefined 데이터가 정의되지 않음  undefined

데이터 없을을 나타내는 방식은 Null이나 Undefined가 있으며 둘다 원시 타입이다.

console.log();
let a;
console.log(a);

const obj = {};
console.log(obj.a);

function fn(a){
    console.log(`fn의 파라메터 값 : ${a}`);
}
fn();


빈 데이터 - Null

- 빈 데이터를 나타내고 싶을 때

원시타입 의미
 Null 데이터가 존재하지 않음 null

데이터 없을을 표시하고 싶을 때 Null을 사용한다.

function fn(param){
    const myList = [
        { id : 1, name : '엄마곰'},
        { id : 2, name : '아빠곰'},
        { id : 3, name : '아기곰'}
    ];

    const user = myList.find((user) => user.id === param);
    return user.name;
}

console.log(fn(1));
console.log(fn(4));

function fn(param){
    const myList = [
        { id : 1, name : '엄마곰'},
        { id : 2, name : '아빠곰'},
        { id : 3, name : '아기곰'}
    ];

    const user = myList.find((user) => user.id === param);
    
    if(!user){
        return null;
    }
    return user.name;
}

console.log(fn(1));
console.log(fn(4));

원시 타입, 객체 타입, typeof, instance, 타입변환, Undefined, Null

반응형

댓글