한준호

자바스크립트 이차원 배열 참조의 함정 본문

Frontend/modern javascript

자바스크립트 이차원 배열 참조의 함정

igoman2 2022. 2. 11. 02:07
728x90

코테를 풀던 중 인덱스에 대한 예외 처리를 하면서 다음과 같은 결과가 나오는 것을 알게되었다.

둘 다 존재하지 않는 인덱스에 대해 참조를 하였지만 결과가 달랐다.

 

자바스크립트의 경우 이차원 배열은 사실 일차원 배열이 쪼개져 있는 것이다. 즉, a[0][1] 을 참조하게 되면 a[0]으로 부터 배열을 반환받고 a[0]에서 다시 [1] 의 요소를 찾게 된다. 따라서 a[-1][0] 의 경우는 undefined[0] 과 같고 undefined는 인덱스 요소를 가지지 않기 때문에 Error가 나오게 되고 a[0][-1]의 경우는 a[0]인 [1, 2]의 -1번째 요소를 참초하게 되므로 undefined가 나오게 된다.

const a = [[1,2], [3,4]]
console.log(a[-1][0]) // Error

const a = [[1,2], [3,4]]
console.log(a[0][-1]) // undefined

https://hashcode.co.kr/questions/2899/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EB%B9%84%EA%B5%90%EC%97%B0%EC%82%B0%EC%9E%90%EB%A5%BC-%EC%93%B0%EB%8A%94%EB%8D%B0-%EC%98%A4%EB%A5%98%EA%B0%80%EB%82%A9%EB%8B%88%EB%8B%A4

 

자바스크립트 비교연산자를 쓰는데 오류가납니다.

console.log(r[a][b]); if(r[a-1][b-1] != '-' && r[a-1][b-1] != '+' && r[a-1][b-1] != '*' && r[a-1][b-1] != '#') r[a-1][b-1] -= Q; 해당내용으로 실행을 시켜보니 TypeError: Cannot read

hashcode.co.kr

 

728x90
Comments