Charactor method

							function startsWith (string, pattern) {
								return string.slice(0, pattern.length) == pattern;
							}
						

존재하지 않는 문자열의 일부를 구할 때 charAt 이나 slice를 사용하면 어떻게 될까? startsWith 함수의 패턴의 일치 여부를 검사하는 문자열보다 길 때도 동작 할까?

							"Pip".charAt(250) // " "
							"Nop".slice(1, 10) // "op"
						

charAt 함수는 지정한 위치에 아무런 문자가 없을 때 " "를 반환하며, slice는 존재하지 않는 새로운 문자열의 일부를 제외할 뿐이다.

그래서 우리가 작성한 버전의 startsWith 함수는, 가령 startsWith("에이콘출판사", "자바스크립트 개론")을 호출한 경우에도 동작한다. pattern이 string 보다 길면 slice를 호출했을 때 언제나 pattern보다 짧은 문자열이 반환된다(string에 충분한 문자가 포함돼 있지 않기 때문). 그런 이유로 ==로 비교하면 false가 반환되며, 이것은 올바른 결과다.

이것은 언제나 프로그램에 대한 비정상적인(하지만 유효한) 입력에 대해 생각해 볼 시간을 마련하는 데 도움이 된다. 이를 보통 예외 상황(corner case)이라고 하며, 이는 모든 '정규' 입력을 대상으로 완벽하게 동작하는 프로그램이 예외적인 상황에서 망가지는 경우에 아주 흔히 접할 수 있다.