본문으로 바로가기

TIL 2022-01-16 JS slice, substring, substr 차이

category TIL 2022. 1. 16. 23:03
JS slice, substring, substr

 

PS를 하다가 문득 slice와 substring, substr의 차이가 헷갈렸다.

 

사실 substr은 안 헷갈렷고 slice와 substring이 헷갈림

str.substr(start[, length])

substr은 시작점과 길이를 인자로 가지며 start 인덱스부터 length개까지를 잘라서 반환한다.

 

ECMA-262 표준에서

… 본 부록이 포함한 모든 언어 기능과 행동은 하나 이상의 바람직하지 않은 특징을 갖고 있으며 사용처가 없어질 경우 명세에서 제거될 것입니다. …
… 프로그래머는 새로운 ECMAScript 코드를 작성할 때 본 부록이 포함한 기능을 사용하거나 존재함을 가정해선 안됩니다. …

라고 하니 PS 이외엔 다른 방법을 사용하는 것이 바람직할거 같다.

 

str.substring(indexStart[, indexEnd])

substring은 시작 인덱스와, 포함하지 않는 마지막 인덱스를 인자로 가진다.

 

항상 헷갈리는 건데, 마지막 인덱스는 포함하지 않는 것이다

 

'abcde'.substring(1,3)

이라면 b,c만 포함되고 3번쨰 인덱스인 d는 포함되지 않는다.

str.slice(beginIndex[, endIndex])

slice도 시작 인덱스와 포함하지 않는 끝 인덱스를 인자로 가진다.

 

차이점은 시작 인덱스가 끝 인덱스보다 크거나, 음수 인덱스가 들어왔을때 있다.

 

indexStart > indexEnd

slice는 빈 문자열("")을 리턴

substring은 둘을 뒤집은 결과를 리턴( substring(indexEnd,indexStart)값 리턴 )

 

음수 인덱스일때

slice는 문자열 뒤에서부터 센다. -2의 인덱스는 문자열 마지막에서 2번째 인덱스를 의미

substring은 0으로 취급

 

 

https://stackoverflow.com/questions/2243824/what-is-the-difference-between-string-slice-and-string-substring

 

What is the difference between String.slice and String.substring?

Does anyone know what the difference is between these two methods? String.prototype.slice String.prototype.substring

stackoverflow.com