안녕하세요. Array length 에 관해서 궁금한게 생겨서 질문을 올립니다.
new 를 사용해서 3 사이즈의 Array 를 만들었습니다. 이후에 새로 키를 할당해서 값을 넣어주었습니다.
예를들어 다음과같은 코드입니다.
var arr3 = new Array(‘Minsu’, ‘Younghee’, ‘Jaejun’);
arr3[‘newkey’] = ‘Gogun’;
arr3[‘mini’] = ‘ka’;
이 경우 arr3.length 값이 여전히 3 이던데요. 왜 이렇게 되는지 알수 있을까요?
동적 할당(? 정확한 용어는 모르겠습니다)을 할 경우 length 값을 업데이트 안해줘서 그런걸까요?
이런 경우가 있기에 push 메소드를 써야한다면 동적할당은 어떤 경우에 유용할지 조언 부탁합니다.
모든 type은 prototype을 가진다? 아닙니다. primitive(scala) type들의 값들은 prototype을 가지지 않습니다.
(혹여나 property를 의미하신 거라 하셔도 아니라고 말씀드리겠습니다. primitive type의 값들은 property 또한 가질 수 없습니다., 래퍼 객체를 생각하시고 하신 말씀이시라면, 래퍼 객체의 내부에는 여전히 primitive type의 값이 [[SymbolData]], [[BooleanData]] 와 같은 이름의 internal slot에 들어있는 걸 알아 주셨으면 합니다.)
제일 큰 index가 아닙니다. 오히려 ‘요소의 수’ 라고 하는 게 더 적절하며, 정확한 정의는 ‘모든 slot의 수’ 입니다(empty slot이라는 개념이 있습니다.).
The basic function of the length property is to track the highest index in an array
Thus, length does not count the number of elements, so you’d have to write your own function for doing so.
이라고 써져 있는데 여기서는 요소의 수를 세지 않고 제일큰 index로 되어 있습니다.
제가 잘못 이해한거 인지?? 설명 좀 부탁드릴 수 있을까요? : )
[1] 이라는 배열이 있을 때, 이 배열에서 최대 인덱스는 0 입니다.
하지만 legnth는 1 이지요.
[,,] 이라는 요소가 없는 배열이 있을 때, 이 배열에서 최대 인덱스는 없습니다.
하지만 이 배열의 length는 3 이지요.
'요소의 수’라고 설명하는 것이 잘못된 이유.
empty slot은 배열의 요소가 아닙니다(애초에, 어떤 값 이 아닙니다. 그래서 map과 같은 함수들로 mapping 할 때에도 무시되지요.). 그럼에도 불구하고 empty slot은 length 프로퍼티에 영향을 미칩니다.
PS: 공유해주신 글에서 말하고자 하는 건, “length가 배열에서 가장 큰 인덱스를 구할 때 사용된다” 인 것 같습니다. 여담이지만 to track이나 length doesn't count the number of elements 같은 어휘를 보아 작성하신 분도 empty slot에 대해 알고 계신 것 같습니다.