Javascript를 사용할 때 array 데이터타입을 사용할 경우가 정말 많고, 그 중 index를 통해 array 안에 담겨있는 요소들에 접근해야 하는 경우가 정말 많다.
이때 index는 0부터 시작하는데 그렇기 때문에 array의 마지막 요소에 접근하는 코드는 다음과 같다.
array[array.length - 1]
array 내장 프로퍼티인 .length프로퍼티로 array 전체의 길이를 정수로 구하고 1을 빼게 되면 마지막 요소에 indexing 할 수 있다.
그러나 파이썬을 포함한 많은 프로그래밍 언어에서는 negative index를 지원한다. 즉 파이썬에서 list의 마지막 요소에 접근하기 위해선
list[-1]
위의 코드도 가능하며 많이 사용된다.
그러나 멋쟁이 우리의 javascrit ! negative index와 같은 기능을 허락할 리가 없다 ! javasciprt가 만들어져 ES5를 거쳐 계속하며 발전하였는데도 구현되지 않은 이유가 궁금했다.
물론 array[-1]
가 심각한 오류를 표하지는 않는다. 다만 마지막 요소로 접근하는 것이 아니라 1, 2, 3 등과 같이 -1 이라는 index를 갖는 요소에 접근하고 대부분 지정하지 않기에 undefined
가 반환되기 마련이다.
명쾌한 답변이 존재하진 않았지만 array 내장 메서드 .indexOf()
때문이라는 설명이 가장 설득력이 높았다. 먼저 .indexOf()
메서드는 해당 array에 argument로 들어가는 요소의 가장 첫 index를 구해주는 메서드이다. 이때 만약 argument로 들어가는 요소가 해당 array에 존재하지 않는다면 return 값은 -1
이게 된다.
그래서
const arr = [1, 2, 3, 4, 5]
if(arr.indexOf(6) !== -1){
~~~~
~~~~
}
와 같이 특정 argument가 array에 있을 때 함수가 작동하는 로직을 구현하기 위해 많이 쓰이는데 만약 negative index가 정상작동 한다면 원하는 로직으로 구현되지 않을 것이다.
그렇기 때문에 계속해서 발전하는 javascript가 negative index를 사용할 수 없다는 썰이 가장 설득력있었다.
참고링크
https://stackoverflow.com/questions/54066261/why-cant-i-do-array-1-in-javascript