javascript object 이해하기(2-1) - String
javascript object 이해하기(1) - Number
javascript 빌트인(Built-in) 이해하기
javascript 연산자(Operator) 이해하기
Prototype과 __proto__ 이해하기(1)
Prototype과 __proto__ 이해하기(2)

javascript object 이해하기(2-1) - String에 이어서 javascript built-in object에서 두번째로 String object를 자세히 알아보자


toString()

"123".toString()는 의미없지 않나요?

속마음 : "123".toString(); 와 같이 String 타입String타입으로 변환 . 왜 하나? 무의미한거 아니야?

문자열에 toString() 함수가 필요한 이유

const obj = String;을 해서 obj를 살펴보면, prototype내에 toString()함수가 있다. 즉, 인스턴스를 할당할 때, 이 prototype이 각 객체에게 상속되어 모든 객체들이 __proto__내에 toString()함수가 존재하여 활용 가능할 것이다.

아래 내용을 이해하기 위해서는 prototype__proto__의 개념 이해가 필요하다. 아래 자료에 매우 쉽게 작성을 하였다^_^
Prototype과 __proto__ 이해하기(1)
Prototype과 __proto__ 이해하기(2)

String instance의 부모는 String object이므로 String object의 toString()을 물려주고, String object의 부모(String instance 의 조부모)는 Object objectObject objecttoString()을 물려주었다.

따라서 구조적으로, 두개의 toString()이 존재하게 되었다.
String instance < String object가 남긴 toString() < Object object가 남긴 toString()

그럼 만약, Object objecttoString()만 존재하고, String objecttoString()은 존재하지 않는다면 어떤 일이 일어날까? 어떤 문제가 있다면, 그것이 바로 String object에도 toString()이 존재하는 이유가 될것이다.

  • 가정 : String objecttoString()이 없다.
  • 예상 결과 :
    • 프로토타입 체이닝으로 인해서, String instancetoString()을 호출하면, Object objecttoString()을 활용하게 될 것이다.
    • Object는 {key:value}형식이어야하는데, 뜬금없이 "abc"Object 객체toString()을 활용하게 된다면? "abc"Object 타입으로 변환하기때문에 내가 원하는 결과가 나오지 않는다.
    • 에러도 안나는데, 결과값은 예상못한 값이 나온다(최악!)
  • 결론 : Object objecttoString()을 혹시라도 활용해서 예상못한 값을 얻을 수 있기때문에, 결과론적으론 문자열에서 문자열로 변환시키는 무의미한 String 객체의 고유 toString()을 만들어놓음

대부분의 built-in objectObject object를 조상으로 하고있고, 이러한 이유로 대부분의 built-in objecttoString()valueOf()를 자체적으로 가지고 있다.


charAt()

const name = "goggling";
console.log(name.charAt(4)); // l
  • parameter 인덱스의 문자를 반환
  • 문자열 길이보다 인덱스가 크면, 빈 문자열 반환
  • 0번 인덱스 : 첫번째 문자열
  • value.charAt(1)은 value[1]과 같음(ES5 기준)

indexOf()

  • data 위치의 문자열에서 파라미터의 문자와 같은 "첫번째" 인덱스 반환(왼쪽에서 오른쪽으로 훑으며 첫번째 매칭되는 문자열의 인덱스 반환)
console.log(name.indexOf("g")); //0
console.log(name.indexOf("gl")); //3
console.log(name.indexOf("j")); // -1

lastIndexOf()

  • data 위치의 문자열에서 파라미터의 문자와 같은 "첫번째" 인덱스 반환(오른쪽에서 왼쪽으로 훑으며 첫번째 매칭되는 문자열의 인덱스 반환)
console.log(name.lastIndexOf("g")); //7
console.log(name.lastIndexOf("j")); // -1

그외

문자열 연결과 관련된 함수들

concat() : 문자열 연결
toLowerCase() : 영문 대문자를 소문자로 변환
toUpperCase() : 영문 소문자를 대문자로 변환
subString() : 파라미터 시작 인덱스부터 끝 인덱스 직전까지 substring 반환
substr() : 파라미터 시작 인덱스부터 지정한 문자 수 substring 반환
slice() : 파라미터 시작 인덱스부터 끝 인덱스 직전까지 반환

정규 표현식과 관련된 함수들

match() : 매치 결과를 배열로 반환 (정규 표현식 패턴 적용가능)
replace() : 매치 결과를 파라미터에 작성한 값으로 대체하여 반환 (정규 표현식 패턴 적용가능)
search() : 매치 결과의 첫번째 인덱스 반환 (매치 안되면 -1 반환) (정규 표현식 패턴 적용가능)
split() : 분리 대상을 분리자로 분리하여 배열로 반환 (정규 표현식 패턴 적용가능)

UNICODE 와 관련 함수

유니코드와 UTF 이해하기

charCodeAt() : 인덱스 번째의 문자의 유니코드의 코드 포인트 값을 반환

const value = "1Aa가";
console.log(value.charCodeAt(0)); //49
console.log(value.charCodeAt(12)); //NaN

fromCharCode() : 파라미터의 유니코드를 문자열로 변환하고 연결하여 변환

console.log(String.fromCharCode(49,65,97,44032)); //1Aa가

localeCompare() : 값을 비교하여 위치를 나타내는 값으로 반환( 1(앞), 0(같음), -1(뒤)), Unicode 사전 순으로 비교

❓ 이런 함수는 언제 활용될 수 있을까?

const value = "A";
console.log(value.localeCompare("a")); //-1

`


내용에 오류가 있다면, 알려주시면 감사합니다.

0개의 댓글