본문 바로가기
내마음대로만들어보자/JS

원시값(=단순값)

by 소농민! 2021. 10. 5.
728x90

1. 원시값이란?

5, 'foo', true, false, null, undefined와 같은 자바스크립트 값은 더이상 단순화할 수 없기에 원시값이라고 한다.

이러한 값은 본질적으로 단순하며, 다른 여러 값으로 구성된 값을 표현할 수 없다.

 

원시값은 자바스크립트에서 사용할 수 있는 데이터 및 정보의 가장 단순한 형태라고 보면된다.

 

* 참고

리터럴 문법을 사용해 값을 만들떄와는 달리 String(), Number(), Boolean()값은 new키워드를 사용해 만들며, 실제로 이렇게 만들어진 객체는 복합객체이다.

 

String(), Number(), Boolean() 생성자는 리터럴/원시값을 만들떄도 사용하지만 복합 객체를 만들 때도 사용할 수 있다.

이러한 생성자들은 객체를 반환하지 않을떄도있으나 대신 new 연산자 없이 사용하면 복합 객체값의 원시형을 반환한다. 

 

2. 원시값 null, undefined, "string", 10, true, fasle 는 객체가 아니다?

null과 undefined 값은 값을 만들기위해  생성자 함수 , new 연산자도 필요없다. 

(연산자를 사용하든 그냥 사용하면 된다.)

나머지 문자열, 숫자, 불리언 윈시값은 기술적으로 생성자 함수에서 반환되지만 객체는 아니다.

 

다음은 원시값과 자바스크립트 네이티브 객체를 비교하는 코드이며, 코드로 알아보자.

 

다시 말해, 원시값은 객체가 아니고 단순한 값을 표현하기 위해 사용되는 특수한 값이다.

 

3. 원시값은 어떻게 저장,복사 되는가?

원시값은 그대로 저장되는 관리된다.

예를들어, 'foo'를 myString이라는 변수에 저장하면 'foo'라는 값이 말 그대로 메모리에 저장된다는 뜻이다.

(원시값은 말 그대로 "복사"가 되므로 값을 조작할때는 항상 이사실을 기억해야된다)

 

원시값에 저장되는 수정되는 값은 더이상 축약할 수 없는 값이며, 원시값을 참조하면 값 자체를 복사한다.

여기에서 myString의 값을 갱신해도 myStringCopy의 값은 여전히 복사할때의 값을 유지하게된다.

 

4. 원시값은 값 자체를 비교한다.

원시자료형을 비교할때는 값 자체를 비교하여 같은지 확인한다.

예를들어, 숫자 10을 저장한 변수와 숫자값 10을 저장한 또 다른 변수를 비교한다고하면, 두 변수가 같다고판단한다. 

 

원시값은 비교할 떄 값 자체가 같은지 비교한다. 

리터럴 문법을 사용해 만든 값과 new키워드를 사용해 만든 값을 비교하면 항상 같지 않다고 나타나게된다.

 

5. 문자열, 숫자, 불리언 원시값을 객체처럼 사용하면 객체처럼 동작한다.

원시값을을 마치 생성자 함수를 통해 만들어진 객체를 다루듯이 사용하면 자바스크리브는 원시값을 객체로 바꾸어 코드를 실행한 후 객체를 버리고 다시 원시값으로 되돌려 놓는다. 

 

다음예제를 통해 원시값을 객체러럼 다루면 어떤 변화가 생기는지 알아보자.

위의 예제에서 모든 원시값(null,undefined 제외)은 객체로 변환되어 toString() 메소드를 사용할 수 있었으며,

이 메소드를 한번 실행하고 값을 반환한 후에는 다시 원시값으로 돌아간다.