[TS] String/string & Number/number

Younghwan Cha·2023년 8월 18일
1

javaScript & typeScript

목록 보기
4/5
post-thumbnail

...다른 거였어?

지나가다가 문득 보인 글을 보고 가장 먼저 든 생각이었다.
뭐가 다른지는 고사하고 다른 거였는지 조차도 몰랐던 내 자신을 반성하며
대체 무엇이 다른 것인지 한번 알아보려한다.

String 과 string


String 은 object, string 은 string 이다.
다시 말하자면 string 은 값 그 자체이고, String 은 다른 속성들의 집합체로 볼 수 있다.

number,string, boolean, symbol 은 primitive type 이고 Number, String, Boolean, Symbol은 참조 자료형이다

primitive type
primitives are values that hold no properties.
즉, 원시 자료형 ( primitive type ) 이란 다른 속성을 갖지 않는 값을 말한다

이쯤에서 문득 의문점이 생길 수 있다. 아래 예시를 같이 보자

const test = 'hello'
console.log(test.length);

> 5

...?
다른 속성 없다며...?

일단 진정하자ㅎㅎ이는 우리가 method 를 호출하는 시점에 javaScript 가 primitive 를 object 로 변경해 일시적으로 method 를 사용할 수 있도록 해주기 때문에 가능한 일이다.

그렇다면 다음 예시를 또 보도록 하자

let a1 = "Hello World";
let b1 = "Hello World";
console.log(a1 != b1);

let a2 = new String("Hello World");
let b2 = new String("Hello World");
console.log(a2 != b2);

> false
true

이처럼 primitive 는 값이 같을 경우 같은 memory location 에 저장하지만, object 의 경우엔 같은 값을 저장하더라도 memory location 이 다른 것을 볼 수 있다.

eval() 함수를 사용하는 경우를 보자.

var a3 = '21 * 25' ;
console.log(eval(a3));
var b3 = new String("1 + 1");
console.log(eval(b3));
console.log(eval(b3.toString()));

> 525 
String { "1 + 1" }
2

이처럼 eval() 함수의 경우, primitive 일 경우에만 연산하고 primitive 가 아닐 경우 객체를 반환한다. 연산한 값을 반환받으려면 toString() 함수를 사용해서 primitive 로 변환 후에 eval() 함수를 사용하면 위에 예시처럼 값을 반환하는 것을 볼 수 있다.

profile
개발 기록

0개의 댓글