자바스크립트에선 UTF-16을 사용해 문자열을 인코딩합니다.
<script>
alert( `My\n`.length ); // 3
</script>
\n은 ‘특수 문자’ 하나로 취급되기 때문에 My\n의 길이는 3입니다.
<script>
let str = `Hello`;
// 첫 번째 글자
alert( str[0] ); // H
// 마지막 글자
alert( str[str.length - 1] ); // o
</script>
<script>
let str = `Hello`;
alert( str[1000] ); // undefined
</script>
<script>
for (let char of "Hello") {
alert(char); // H,e,l,l,o (char는 순차적으로 H, e, l, l, o가 됩니다.)
}
</script>
<script>
let str = 'Hi';
str[0] = 'h'; // Error: Cannot assign to read only property '0' of string 'Hi'
alert( str[0] ); // 동작하지 않습니다.
</script>
<script>
let str = 'Hi';
str = 'h' + str[1]; // 문자열 전체를 교체함
alert( str ); // hi
</script>
<script>
alert( 'Interface'.toUpperCase() ); // INTERFACE
alert( 'Interface'.toLowerCase() ); // interface
// 글자 하나의 케이스만 변경하는 것도 가능합니다.
alert( 'Interface'[0].toLowerCase() ); // 'i'
</script>
indexOf 메서드
indexOf 함수로 문자열 찾기
<script>
let str = 'HTML,CSS,JavaScript';
let pos1 = str.indexOf('JavaScript');
// 결과 : 9
let pos2 = str.indexOf('Kotlin');
// 결과 : -1
</script>
찾을 문자열이 여러 개인 경우 첫 번째 찾은 문자열의 위치를 반환한다.
<script>
let str = 'HTML,CSS,JavaScript';
let pos = str.indexOf(',');
// 결과 : 4
</script>
indexOf("찾을 문자열", "시작 위치")
<script>
let str = 'HTML,CSS,JavaScript';
let pos1 = str.indexOf(',', 5);
// 결과 : 8
let pos2 = str.indexOf(',', str.indexOf(',') + 1);
// 결과 : 8
</script>
반복문 안에 indexOf
<script>
let str = 'As sly as a fox, as strong as an ox';
let target = 'as'; // as를 찾아봅시다.
let pos = 0;
while (true) {
let foundPos = str.indexOf(target, pos);
if (foundPos == -1) break;
alert( `위치: ${foundPos}` ); // 7, 17, 27 출력
pos = foundPos + 1; // 다음 위치를 기준으로 검색을 이어갑니다.
}
</script>
⚠️ if문의 조건식에 indexOf를 쓸 때 주의할 점
아래와 같이 코드를 작성하면 원하는 결과를 얻을 수 없습니다.
<script>
let str = "Widget with id";
if (str.indexOf("Widget")) {
alert("찾았다!"); // 의도한 대로 동작하지 않습니다.
}
</script>
따라서 부분 문자열 여부를 검사하려면 아래와 같이 -1과 비교해야 합니다.
<script>
let str = "Widget with id";
if (str.indexOf("Widget") != -1) {
alert("찾았다!"); // 의도한 대로 동작합니다.
}
</script>
<script>
alert( "Widget with id".includes("Widget") ); // true
alert( "Hello".includes("Bye") ); // false
</script>
<script>
alert( "Widget".includes("id") ); // true
alert( "Widget".includes("id", 3) ); // false, 세 번째 위치 이후엔 "id"가 없습니다.
</script>
<script>
alert( "Widget".startsWith("Wid") ); // true, "Widget"은 "Wid"로 시작합니다.
alert( "Widget".endsWith("get") ); // true, "Widget"은 "get"으로 끝납니다.
</script>
1. str.slice(시작 번호 , 끝 번호)
<script>
let str = "stringify";
alert( str.slice(0, 5) ); // 'strin', 0번째부터 5번째 위치까지(5번째 위치의 글자는 포함하지 않음)
alert( str.slice(0, 1) ); // 's', 0번째부터 1번째 위치까지(1번째 위치의 자는 포함하지 않음)
</script>
<script>
let str = "stringify";
alert( str.slice(2) ); // ringify, 2번째부터 끝까지
</script>
<script>
let str = "stringify";
// 끝에서 4번째부터 시작해 끝에서 1번째 위치까지
alert( str.slice(-4, -1) ); // gif
</script>
2. str.substring(시작 번호 , 끝 번호)
<script>
let str = "stringify";
// 동일한 부분 문자열을 반환합니다.
alert( str.substring(2, 6) ); // "ring"
alert( str.substring(6, 2) ); // "ring"
// slice를 사용하면 결과가 다릅니다.
alert( str.slice(2, 6) ); // "ring" (같음)
alert( str.slice(6, 2) ); // "" (빈 문자열)
</script>
slice가 substring보다 좀 더 유연합니다.
(음수 인수를 허용하기 때문)
3. str.substr(시작 번호, 반환할 글자의 개수])
<script>
let str = "stringify";
alert( str.substr(2, 4) ); // ring, 두 번째부터 글자 네 개
</script>
<script>
let str = "stringify";
alert( str.substr(-4, 2) ); // gi, 끝에서 네 번째 위치부터 글자 두 개
</script>
문자열을 비교할 땐 알파벳 순서를 기준으로 글자끼리 비교가 이뤄집니다.
순서가 작은 것 부터 출력됩니다.
<script>
alert( 'a' > 'Z' ); // true
</script>
<script>
alert( 'Österreich' > 'Zealand' ); // true
</script>
글자에서 연관 코드를 알아낼 수 있는 메서드
pos에 위치한 글자의 코드를 반환합니다.
<script>
// 글자는 같지만 케이스는 다르므로 반환되는 코드가 다릅니다.
alert( "z".codePointAt(0) ); // 122
alert( "Z".codePointAt(0) ); // 90
</script>
숫자 형식의 code에 대응하는 글자를 만들어줍니다.
<script>
alert( String.fromCodePoint(90) ); // Z
</script>
코드 65와 220 사이(라틴계열 알파벳과 기타 글자들이 여기에 포함됨)에 대응하는 글자들을 출력하면
<script>
let str = '';
for (let i = 65; i <= 220; i++) {
str += String.fromCodePoint(i);
}
alert( str );
// ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
// ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜ
</script>
지정한 인덱스 문자 추출. 문자 반환
<script>
console.log(`javascript`.charAt(3)); //a
</script>
문자열 양끝 공백 제거 후 반환. 스페이스, 탭, 줄바꿈 공백 제거
<script>
let hello = ` 안녕 하세요? `;
console.log(hello); // 안녕 하세요?
hello = hello.trim();
console.log(hello);// 안녕 하세요?
</script>
기준문자를 기준으로 분할 숫자만큼 나눠 배열 반환
<script>
let url = `https://www.naver.com`;
url = url.split(".", 2); //.을 기준으로 둘로 나눈다
// [ 'https://www', 'naver' ]
url = url.split("."); //.이 있는곳을 기준으로 모두 나눔
// [ 'https://www', 'naver', 'com' ]
</script>
백틱 ``은 문자열을 열어줄에 걸쳐 쓸 수 있게 해주고,
문자열 내에 ${}으로 표현식 작성이 가능합니다.
문자열 데이터는 줄을 바꾸면 오류가 발생합니다.
줄바꿈 할 땐 \를 사용하면 됩니다.
<script>
let site = "조두찌와 이주현은 절친한 친구입니다." //원문
let site = "조두찌와 이주현은 절친한 친구
입니다." //오류 발생
let site = "조두찌와 이주현은 절친한 친구\
입니다." //백슬래시 사용
</script>