이 두 가지 방법의 차이가 무엇인지 아는 사람 있나요?
String.prototype.slice String.prototype.substring
질문에 대한 답변
slice()
와 같이 동작합니다.substring()
몇 가지 다른 행동과 함께요
Syntax: string.slice(start, stop); Syntax: string.substring(start, stop);
이들의 공통점:
- 한다면
start
동등.stop
: 빈 문자열을 반환합니다. - 한다면
stop
생략: 문자열 끝에 있는 문자를 추출합니다. - 인수 중 하나가 문자열 길이보다 클 경우 문자열 길이가 대신 사용됩니다.
의 구별 substring()
:
- 한다면
start > stop
,그리고나서substring
는 이들 2개의 인수를 바꿉니다. - 어느 하나의 인수가 부정적이거나
NaN
, 그것은 마치 그랬던 것처럼 취급됩니다.0
.
의 구별 slice()
:
- 한다면
start > stop
,slice()
빈 문자열이 반환됩니다.(""
) - 한다면
start
is negative: 문자열의 끝에서 문자를 설정합니다.substr()
파이어폭스에서는,이 동작은 Firefox와 IE 모두에서 볼 수 있습니다. - 한다면
stop
negative: 중지를 다음과 같이 설정합니다.string.length – Math.abs(stop)
(원래 값), 단 0(표준),Math.max(0, string.length + stop)
ECMA 사양에 기재되어 있습니다.
출처 : 프로그래밍 및 개발의 기초기술 : Javascript : substring ( )
TL;DR:
- 정지할 인덱스(포함되지 않은 위치)를 알고 있는 경우
slice()
. - 추출할 문자의 길이를 알고 있다면
substr()
단, 이는 권장되지 않으므로 권장되지 않습니다.
그렇지 않은 경우 전체 비교를 위해 계속 읽어 보십시오.
구문
string.slice(start,end)
string.substr(start,length)
string.substring(start,end)
주 1:slice()==substring()
그게 뭘 하는데?
slice()
는 문자열의 일부를 추출하고 추출된 부분을 새 문자열로 반환합니다.substr()
는 지정된 위치에 있는 문자부터 시작하는 문자열의 일부를 추출하여 지정된 문자 수를 반환합니다.substring()
는 문자열의 일부를 추출하고 추출된 부분을 새 문자열로 반환합니다.
주 2:slice()==substring()
원래 문자열을 변경하시겠습니까?
slice()
Doesn’t.substr()
Doesn’t.substring()
Doesn’t.
주 3:slice()==substr()==substring()
음수를 인수로 사용
slice()
문자열 끝에서 시작하는 문자를 선택합니다.substr()
문자열 끝에서 시작하는 문자를 선택합니다.substring()
동작하지 않다
주 4:slice()==substr()
첫 번째 인수가 두 번째 인수보다 큰 경우
slice()
동작하지 않다substr()
두 번째 인수는 위치가 아니라 길이 값이기 때문에 문제 없이 평상시와 같이 작동합니다.substring()
2개의 인수를 교환하여 정상적으로 동작합니다.
첫 번째 인수
slice()
필수, 인덱스 시작substr()
필수, 인덱스 시작substring()
필수, 인덱스 시작
주 5:slice()==substr()==substring()
두 번째 인수
slice()
옵션, 추출을 종료하는 위치(최대, 포함하지 않음)substr()
옵션, 추출할 문자 수substring()
옵션, 추출을 종료하는 위치(최대, 포함하지 않음)
주 6:slice()==substring()
두 번째 인수가 생략되면 어떻게 됩니까?
slice()
문자열의 시작 위치에서 끝까지의 모든 문자를 선택합니다.substr()
문자열의 시작 위치에서 끝까지의 모든 문자를 선택합니다.substring()
문자열의 시작 위치에서 끝까지의 모든 문자를 선택합니다.
주 7:slice()==substr()==substring()
그러니까 이 두 가지 차이점이 있다고 할 수 있습니다.slice()
그리고.substr()
,하는 동안에substring()
기본적으로는 의 복사입니다.slice()
.
네가 원한다면substr
의 기능:
"foobarbaz".substr(index, length);
권장되지 않는 기능을 사용하지 않고 다음 작업을 수행할 수 있습니다.
"foobarbaz".substring(index, length + index);
또한 음의 인덱스/길이 등 모든 엣지 케이스를 제외한 동일한 결과를 얻을 수 있습니다.
Ben Nadel은 이에 대한 좋은 기사를 썼는데, 그는 다음과 같은 기능에 대한 매개 변수의 차이를 지적합니다.
String.slice( begin [, end ] ) String.substring( from [, to ] ) String.substr( start [, length ] )
또한 슬라이스할 모수가 음수인 경우 끝에서부터 문자열을 참조한다는 점도 지적합니다.서브스트링과 기판은 그렇지 않습니다.
한 가지 답변은 괜찮지만 조금 읽어야 한다.특히 ‘정지’라는 새로운 용어가 등장했습니다.
My Go – 위의 Daniel에 의한 첫 번째 답변 외에 유용하게 사용할 수 있도록 차이에 따라 정리됩니다.
1) 마이너스 지수.하위 문자열에는 양의 인덱스가 필요하며 음의 인덱스를 0으로 설정합니다.슬라이스의 음수 색인은 문자열의 끝에서부터의 위치를 의미합니다.
"1234".substring(-2, -1) == "1234".substring(0,0) == "" "1234".slice(-2, -1) == "1234".slice(2, 3) == "3"
2) 인덱스 교환.하위 문자열은 첫 번째 인덱스가 두 번째 인덱스보다 작거나 같도록 인덱스의 순서를 변경합니다.
"1234".substring(3,2) == "1234".substring(2,3) == "3" "1234".slice(3,2) == ""
————————–
일반적인 코멘트 – 두 번째 인덱스가 슬라이스 또는 하위 문자열의 마지막 문자 뒤의 위치인 것은 이상합니다.“1234”.slice(2,2)가 “3”을 반환할 것으로 예상됩니다.“1234”.slice(2, -1)가 “34”를 반환할 것으로 예상합니다.네, Javascript가 처음이라는 뜻입니다.이것은, 다음의 동작도 의미합니다.
"1234".slice(-2, -2) == "", "1234".slice(-2, -1) == "3", "1234".slice(-2, -0) == "" <-- you have to use length or omit the argument to get the 4. "1234".slice(3, -2) == "", "1234".slice(3, -1) == "", "1234".slice(3, -0) == "" <-- same issue, but seems weirder.
나의 2c.
의 차이점substring
그리고.slice
– 해외에서의 부정적이고 간과하는 선에 대해 어떻게 기능하는가.
서브스트링(시작, 종료)
마이너스 인수는 0으로 해석됩니다.너무 큰 값은 문자열 길이로 잘립니다.
alert("testme".substring(-2)); // "testme", -2 becomes 0
또한 start > end의 경우 인수가 교환됩니다.즉, 플롯 행은 시작과 종료 사이에 반환됩니다.
alert("testme".substring(4, -1)); // "test" // -1 Becomes 0 -> got substring (4, 0) // 4> 0, so that the arguments are swapped -> substring (0, 4) = "test"
조각을 내라
음수 값은 회선의 끝에서 측정됩니다.
alert("testme".slice(-2)); // "me", from the end position 2 alert("testme".slice(1, -1)); // "estm", from the first position to the one at the end.
그것은 이상한 논리보다 훨씬 편리하다.substring
.
IE8-를 제외한 모든 브라우저에서 지원되는 기판에 대한 첫 번째 매개 변수의 음수 값입니다.
이 세 가지 방법 중 하나를 선택하여 대부분의 상황에서 사용할 경우,slice
: 부정의 논거와 가장 명백한 유지와 조작을 합니다.