문자열 유형의 사용법
예를 들어 잘 알려진 문자열 사용법을 검토하세요.
let str = 'orange'; str.indexOf('o'); //0 str.indexOf('n'); //3 str.indexOf('c'); //-1
여기서 0과 3은 각각 문자열에서 o와 n의 위치입니다. 시작 인덱스는 0입니다. 그리고 -1은 일치하는 항목이 없음을 의미합니다.
왜 -1이 null이 아니거나 정의되지 않았는지 묻는 사람이 있었습니다. 규칙을 만든 사람에게 물어보세요. 그는 무력해 보였습니다.
여기서는 모두 흥미로운 내용을 볼 수 없습니다. 걱정하지 마세요. 여기에 또 다른 예가 있습니다
let numStr = '2016'; numStr.indexOf('2'); //0 numStr.indexOf(2); //0
여기에서 볼 수 있는 작은 점은 indexOf가 간단한 유형 변환을 수행하여 숫자를 문자열로 변환한다는 것입니다. '2'를 누른 다음 실행합니다.
숫자형 사용법
암시적 변환을 하기 때문에 숫자형에 indexOf 메소드가 있는지 궁금하실텐데요, 위의 예는 없다는 점을 분명히 말씀드립니다
let num = 2016; num.indexOf(2); //Uncaught TypeError: num.indexOf is not a function
숫자형은 indexOf 메소드를 사용해야 하나요? 그런 다음 문자열로 변환한 후 위의 예시에서
//二逼青年的写法 num = '2016'; num.indexOf(2); //0 //普通青年的写法 num.toString().indexOf(2); //0 //文艺青年的写法 ('' + num).indexOf(2); //0
을 작성하는 방법은 간단합니다. 간단하고 알려진 더 짧은 숫자에는 불가능하지 않습니다. 그런데 데이터마다 num 변수가 변경되면 어떻게 해야 할까요?
두 번째 작성 방법이 가장 많이 사용되지만, 세 번째 작성 방법보다 조금 더 깁니다. ㅎㅎ 사실은 다 가능합니다. 3번 유형처럼 코드에 집착하는 분들
배열형 사용
여러분 힘내세요 대장님이 오십니다.
모두가 배열 메소드에 익숙하지만 배열에 indexOf 메소드가 있다는 점을 무시합니다(개인적인 느낌).
연습 없이 그냥 이야기하는 것뿐입니다. 어떤 문제에 직면했고 어떤 점에 주의해야 합니까?
let arr = ['orange', '2016', '2016']; arr.indexOf('orange'); //0 arr.indexOf('o'); //-1 arr.indexOf('2016'); //1 arr.indexOf(2016); //-1
여기서는 4가지 사용 사례만으로 충분합니다. 문제를 설명합니다.
arr.indexOf('orange')는 'orange'가 배열의 0번째 요소이므로 0을 출력하고, 인덱스가 일치하여 반환됩니다.
arr.indexOf('o')는 -1을 출력합니다. 왜냐하면 이 메서드는 요소별로 indexOf 일치를 다시 수행하지 않기 때문입니다.
arr.indexOf('2016')는 모든 일치 항목의 인덱스를 반환하는 대신 일치 항목에 도달할 때까지 처음부터 첫 번째 배열 요소의 다음 목록을 반환하기 때문에 1을 출력합니다.
arr.indexOf(2016) 출력 -1 참고: 여기서는 암시적 유형 변환이 수행되지 않습니다.
이제 함정이 발견되었으니 그 진상을 파헤쳐 보는 편이 나을 것 같습니다. MDN 공식 웹사이트를 방문하여 알아보세요. 이 주제에 관심이 있는 친구들은 Array.prototype.indexOf()로 직접 이동할 수 있습니다.
더 알고 싶은 분들을 위한 공식 설명은 다음과 같습니다.
indexOf()는 엄격한 동등성(=== 또는 삼중 동등 연산자에서 사용하는 것과 동일한 방법)을 사용하여 searchElement를 배열의 요소와 비교합니다.
한 눈에 엄격하다는 것이 분명합니다. 여기서는 평등이 사용됩니다(===). 비슷한 판단을 내릴 때 좀 더 주의를 기울여 주시기 바랍니다. 숫자는 문자열로 변환되고 문자열은 숫자로 변환되지 않을 것이라고 생각하는 실수를 저지르지 마십시오.
요약
작은 지식 포인트의 축적은 심도 있는 논의를 위한 주제가 아니기 때문에 여기에서는 indexOf()의 두 번째 매개변수에 대한 설명은 생략하겠습니다. 아니요 알고 계시다면 여기에서 String.prototype.indexOf()를 살펴보신 후 위 배열에 대한 링크와 함께 두 번째 매개변수를 살펴보세요.