자바스크립트 string methods - substring() / slice() / splice() 차이점
1. substring()
substring() 메소드는 string 객체의 시작 인덱스(포함) 부터 종료 인덱스 전(불포함) 까지의 부분 문자열을 반환(return) 합니다.
str.substring(indexStart[, indexEnd])
const str = 'Mozilla';
console.log(str.substring(1, 3));
// expected output: "oz"
console.log(str.substring(2));
// expected output: "zilla"
- 만약 indexEnd 가 생략된 경우, substring() 문자열의 끝까지 모든 문자를 추출합니다.
- 만약 indexStart 가 indexEnd와 같을 경우, substring() 빈 문자열을 반환합니다.
- 만약 indexStart 가 indexEnd보다 큰 경우, substring() 메서드는 마치 두 개의 인자를 바꾼 듯 작동하게 됩니다.
- 0보다 작은 인자 값을 가지는 경우에는 0으로, stringName.length 보다 큰 인자 값을 가지는 경우, stringName.length 로 처리됩니다.
- NaN 값은 0으로 처리됩니다.
2. slice()
slice() 메소드는 문자열의 일부를 추출하면서 새로운 문자열을 반환합니다.
문자열의 변경은 다른 문자열에 영향을 미치지 않습니다.
str.slice(beginIndex[, endIndex])
- 만약 음수라면, beginIndex는 strLength(문자열 길이) + beginIndex로 취급됩니다. (예를 들어 beginIndex가 -3이면 시작점은 strLength - 3)
- 만약 beginIndex가 strLength 보다 크거나 같은 경우, slice()는 빈 문자열을 반환합니다.
- 인덱스 위치의 문자는 추출에 포함되지 않습니다.
- 만약 endIndex가 생략된다면, silce()는 문자열 마지막까지 추출합니다.
- 만약 음수라면, endIndex는 strLength(문자열 길이) + endIndex 로 취급됩니다(예를 들어 endIndex가 -3이면 종료점은 strLength - 3).
const str = 'The quick brown fox jumps over the lazy dog.';
console.log(str.slice(31));
// expected output: "the lazy dog."
console.log(str.slice(4, 19));
// expected output: "quick brown fox"
console.log(str.slice(-4));
// expected output: "dog."
console.log(str.slice(-9, -5));
// expected output: "lazy"
return 하기
아래 예시는 새 문자열을 생성하기 위해 slice()를 사용합니다.
var str1 = 'The morning is upon us.', // the length of str1 is 23.
str2 = str1.slice(1, 8),
str3 = str1.slice(4, -2),
str4 = str1.slice(12),
str5 = str1.slice(30);
console.log(str2); // OUTPUT: he morn
console.log(str3); // OUTPUT: morning is upon u
console.log(str4); // OUTPUT: is upon us.
console.log(str5); // OUTPUT: ""
음수 index 사용하기
아래 예시는 slice()에 음수 인덱스를 사용합니다.
var str = 'The morning is upon us.';
str.slice(-3); // returns 'us.'
str.slice(-3, -1); // returns 'us'
str.slice(0, -1); // returns 'The morning is upon us'
3. splice()
배열의 기존 요소를 교체, 삭제, 추가하여 배열의 내용을 변경합니다. 원본수정 (O)
array.splice(start[, deleteCount[, item1[, item2[, ...]]]])
- 음수인 경우 : 음수인 경우 배열의 끝에서부터 요소를 세어나갑니다(원점 -1, 즉 -n이면 요소 끝의 n번째 요소를 가리키며 array.length - n번째 인덱스와 같음)
- 배열의 길이보다 큰수 : 배열의 길이보다 큰 값이라면 실제 시작 인덱스는 배열의 길이로 설정됩니다. 값의 절대값이 배열의 길이 보다 큰 경우 0으로 설정됩니다.
- deleteCount를 생략하거나 값이 array.length - start보다 크면 start부터의 모든 요소를 제거합니다. deleteCount가 0 이하라면 어떤 요소도 제거하지 않습니다. 이 때는 최소한 하나의 새로운 요소를 지정해야 합니다.
item1, item2, ... (Optional) : 배열에 추가할 요소입니다.
- 아무 요소도 지정하지 않으면 splice()는 요소를 제거하기만 합니다.
return 하기
제거한 요소를 담은 배열. 하나의 요소만 제거한 경우 길이가 1인 배열을 반환합니다.
아무 값도 제거하지 않았으면 빈 배열을 반환합니다.
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
var arr1 = arr.splice(10, 2, 'a', 'b', 'c');
console.log(arr); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, "a", "b", "c"]
console.log(arr1); // [11, 12]
-------------------------------------------------------
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
var arr1 = arr.splice(-6, 4);
console.log(arr); // [1, 2, 3, 4, 5, 6, 11, 12]
console.log(arr1); // [7, 8, 9, 10]
3. substring() 과 slice() 의 차이.
두 methods는 비슷해 보이지만 차이점이 있습니다.
1) substring() method는 indexStart 값이 indexEnd값보다 크다면 둘의 위치를 바꿉니다. 즉 둘의 위치를 바꿔서 값이 발생합니다. 하지만 slice() method의 경우 빈 string을 리턴하게 됩니다.
var text = 'Mozilla';
console.log(text.substring(5, 2)); // => "zil"
console.log(text.slice(5, 2)); // => ""
console.log(text.substring(-5, 2)); // => "Mo"
console.log(text.substring(-5, -2)); // => ""
slice() 또한 NaN 인자를 0으로 취급하지만 음수값의 경우 문자열의 뒷부분부터 카운트 하여 값을 추출해 냅니다.
console.log(text.slice(-5, 2)); // => ""
console.log(text.slice(-5, -2)); // => "zil"
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/slice
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/substring