
Infinity.length가 undefined인 이유는 Infinity가 객체가 아니라 원시 값(primitive value)이고, .length라는 속성을 갖고 있지 않기 때문임.
원시 값(primitive value)이란?
- 자바스크립트에서 가장 기본적인 데이터 타입을 말하며, 더 이상 쪼갤 수 없는 값으로 객체가 아닌 값
Infinity는 무엇인가?자바스크립트에서 Infinity는 숫자(Number) 타입의 특수한 값(= 원시값)으로, 무한대를 나타냄
typeof Infinity; // "number"
즉, 단순 숫자 값으로length 개념이 적용되지 않음.
Infinity의 length 정보가 미친듯이 필요할 때는?필요하다면 String(Infinity).length처럼 문자열로 바꾼 후 길이를 확인할 수 있다!
console.log('Infinity의 length ==> ', Infinity.length);
// Infinity의 length ==> undefined
console.log('length 확인 가보자고 ==>', String(Infinity).length);
// length 확인 가보자고 ==> 8
자바스크립트에서 String은 배열(Array) 객체가 아님에도 불구하고,
문자 개수를 확인할 수 있는 length 프로퍼티를 가지고 있다.
이유는
String객체는 유사 배열 객체이기 때문이다.
유사 배열 객체란?
- 인덱스로 개별 요소(문자)에 접근 가능하다.
length프로퍼티를 가지고 있어 길이를 알 수 있다.
하지만 배열 전용 메서드(forEach,map등)는 사용할 수 없다.
const str = "Hello";
console.log(str[0]); // "H"
console.log(str.length); // 5
// 배열 메서드는 동작하지 않음
// str.forEach(ch => console.log(ch)); // TypeError