String의 차이점은 무엇입니까?

이 두 가지 방법의 차이가 무엇인지 아는 사람 있나요?

String.prototype.slice String.prototype.substring 


질문에 대한 답변



slice()와 같이 동작합니다.substring()몇 가지 다른 행동과 함께요

Syntax: string.slice(start, stop); Syntax: string.substring(start, stop); 

이들의 공통점:

  1. 한다면start동등.stop: 빈 문자열을 반환합니다.
  2. 한다면stop생략: 문자열 끝에 있는 문자를 추출합니다.
  3. 인수 중 하나가 문자열 길이보다 클 경우 문자열 길이가 대신 사용됩니다.

의 구별 substring():

  1. 한다면start > stop,그리고나서substring는 이들 2개의 인수를 바꿉니다.
  2. 어느 하나의 인수가 부정적이거나NaN, 그것은 마치 그랬던 것처럼 취급됩니다.0.

의 구별 slice():

  1. 한다면start > stop,slice()빈 문자열이 반환됩니다.("")
  2. 한다면startis negative: 문자열의 끝에서 문자를 설정합니다.substr()파이어폭스에서는,이 동작은 Firefox와 IE 모두에서 볼 수 있습니다.
  3. 한다면stopnegative: 중지를 다음과 같이 설정합니다.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: 부정의 논거와 가장 명백한 유지와 조작을 합니다.