[JS]타입

jihye·2022년 7월 11일
0

자바스크립트

목록 보기
7/7

자바스크립트에는 7가지 내장 타입이 존재한다.

boolean, number, string, object, null, undefined, symbol

이러한 타입은 원시값객체로 나뉜다.

원시값

객체를 제외한 모든 타입은 불변 값(변경할 수 없는 값)을 정의하는데 이러한 타입을 원시값 이라 한다.
원시 타입 데이터는 변수에 할당될 때, 메모리 상에 고정된 크기로 저장되고 해당 변수가 원시 데이터 값을 보관한다.

let x = 100; //원시 타입 데이터를 선언
let y = x; //값을 새 변수에 복사 
x = 99; // 원시 값 x 변경. y는 변경되지 않음. 
console.log(y) // 100 반환 

참조값

object는 참조 타입이다.
array(배열)나 function(함수)는 object에 속한다.
참조 데이터는 크기가 정해져있지 않고, 변수에 할당될 때 값이 직접 해당 변수에 저장될 수 없다.
변수에는 데이터에 대한 참조만 저장된다. 참조는 참조 타입 데이터의 주소이지 해당 데이터의 값이 아니다.

let test = {first : 1}  //참조 타입 데이터 선언
let test2 = test; //참조를 새 변수 test2에 복사
test.first = 0; // 참조 타입 데이터를 변경, test2는 동일한 참조를 담고 있음 
console.log(test2.first) // 0 반환

boolean

논리 요소를 나타내며 true, false 두가지의 값을 가질 수 있다.

console.log(typeof true); //boolean 

let a = 'boolean' 
let b = 'string'
console.log(a = b) // false 반환 => false 자체가 boolean 타입

number

숫자 타입을 말하며 0, +0, NaN, 15, -35 와 같은 숫자는 모두 number 타입이다.

typeof NaN // 'number'
typeof 0 // 'number'
typeof -0 // 'number'

여기서 NaN이란 "Not a Number" 이란 뜻으로, 간단히 말하자면 number의 의도를 가졌으나 number이 아니게 된 값을 뜻한다.

let a = 10/'나누기'
console.log(a) // NaN

string

텍스트 타입을 말하며, 큰따옴표("")나 작은따옴표('')로 둘러싸인 문자 집합이다.

let a = '작은 따옴표'
let b = "큰 따옴표"

//자바스크립트에서는 문자열과 숫자를 더할 수 있다. 숫자를 문자열로 자동 변환 후, 두 문자를 연결해줌 
let c = 10
let d = 'th'
console.log(c+d) // '10th'

null

일반적으로 존재하지 않거나 유효하지 않은 object, 또는 어떤 값이 의도적으로 비어있음을 표현한다.
boolean 연산에서는 false로 취급

typeof null // 'object'
var foo = null;
foo //null 

undefined

변수가 선언된 후, 값을 할당하지 않은 변수 혹은 값이 주어지지 않은 인수에 자동으로 할당된다.
전역 객체의 속성으로 전역 스코프에서의 변수이다.

typeof undefined // undefined 
var x  // 값을 할당하지 않고 변수 선언
console.log(x) //undefined 

=> undefined 와 null의 차이점은 ? 값을 의도적으로 비었느냐 아니냐로 생각하면 쉽다!


object

객체는 식별자로 참조할 수 있는 메모리 상의 값을 말한다.
자바스크립트 객체는 키와 값 사이의 맵핑으로, 키는 문자열 또는 심볼이고 값은 아무것이나 가능하다.
객체의 속성(프로퍼티 property)으로 함수가 올 수도 있는데, 이러한 속성을 메소드(method)라고 한다.
자바스크립트에선 숫자, 문자열, boolean, undefined 타입을 제외한 모든 것이 객체이다.

let mong = {age: 15, name: 몽이}
let tori = {age: 15, name: tori}
let test = {
   sumAge : function(){ return mong.name + tori['name']  }
}

symbol

고유하고 변경 불가능한 원시 값으로, Symbol()로부터 반환되는 모든 심볼 값은 고유하다.
객체의 속성 키로 사용할 수 있고, 유일한 식별자를 만들고 싶을 때 사용한다.

// dog는 새로운 심볼이 된다. 
let dog = Symbol();
// 심볼을 만들 때 이름이라 불리는 설명을 붙일 수 있다. 심볼 이름은 디버깅 시 아주 유용함
let dog = Symbol('mongtori') 
console.log(dog) // Symbol('mongtori') 
console.log(typeof dog) // symbol

심볼은 유일성이 보장되는 자료형이기 때문에, 설명이 동일한 심볼을 여러개 만들어도 각 심볼값은 다르다. 심볼에 붙이는 설명(심볼 이름)은 어떤 것에도 영향을 주지 않는 이름표 역할만 한다.

let dog1 = Symbol('mongtori');
let dog2 = Symbol('mongtori');
console.log(dog1 == dog2) // false
profile
프론트엔드 개발자

0개의 댓글