...다른 거였어?
지나가다가 문득 보인 글을 보고 가장 먼저 든 생각이었다.
뭐가 다른지는 고사하고 다른 거였는지 조차도 몰랐던 내 자신을 반성하며
대체 무엇이 다른 것인지 한번 알아보려한다.
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()
함수를 사용하면 위에 예시처럼 값을 반환하는 것을 볼 수 있다.