이 책의 섹션 2.8.4에서는 String 클래스의 subString() 메서드와 Slice() 메서드에 대해 설명합니다. 다음 예제와 같이 사용법과 반환 결과는 기본적으로 동일합니다.
var strObj = new String("hello world")
alert(strObj) .slice(3)); / / 출력 결과: "ol world"
alert(strObj.subString(3)); // 출력 결과: "ol world"
alert(strObj.slice(3, 7) )); // 출력 결과: "low w"
alert(strObj.subString(3,7)); // 출력 결과: "low w"
에서 볼 수 있듯이 위 코드의 출력인 Slice() 메서드와 subString() 메서드 호출 메서드 및 출력 결과는 모두 동일합니다. 두 메서드 모두 처리할 문자열의 하위 문자열을 반환하며 둘 다 하나 또는 두 개의 매개 변수를 받습니다. 두 번째 매개변수는 문자열의 끝 위치를 가져오는 것입니다. 두 번째 매개변수가 생략되면 끝 위치는 문자열의 길이로 기본 설정되며 두 방법 모두 값을 변경하지 않습니다. String 객체 자체.
완전히 동일한 기능을 가진 두 가지 방법이 있는 이유는 무엇입니까? 실제로 두 가지 방법은 완전히 동일하지는 않지만 매개변수가 음수인 경우에만 매개변수를 약간 다르게 처리합니다.
음수 매개변수의 경우, Slice() 메소드는 문자열 길이를 매개변수에 추가하고 subString() 메소드는 이를 0으로 처리합니다. 예:
var strObj = new String("hello world")
alert(strObj) .slice(-3)); // 출력 결과: "rld"
alert(strObj.subString(-3)); // 출력 결과: "hello world"
alert(strObj.slice(3, -4)); // 출력 결과: "low w"
alert(strObj.subString(3,-4)) // 출력 결과: "hel"
이렇게 하면 Slice() 및 subString() 접근 방식의 주요 차이점을 볼 수 있습니다. -3 매개변수만 있는 경우, Slice()는 "rld"를 반환하고 subString()은 "hello world"를 반환합니다. 이는 "hello world" 문자열의 경우, 슬라이스(-3)가 슬라이스(8)로 변환되고, subString(-3)이 subString(0)으로 변환되기 때문입니다. 마찬가지로 3과 -4를 사용하는 것의 차이점도 분명합니다. Slice() 메소드는 이전 예제와 마찬가지로 "low"를 반환하는 Slice(3,7)로 변환됩니다. subString() 메소드는 이 두 매개변수를 subString(0,3)으로 해석합니다. 실제로는 subString(0,3)입니다. 왜냐하면 subString()은 항상 더 작은 매개변수를 시작 위치로 사용하고 더 큰 매개변수를 숫자로 사용하기 때문입니다. 마지막 숫자.