이 때 빈슬롯은 명시적으로 undefined 해준 것과는 다르다.
- 배열도 객체! 그러므로 프로퍼티 추가 가능 -> <i>하지만 왠만하면 쓰지 마셈...</i>
#### 2.1.1 유사 배열
객체도 배열처럼 쓸 수 있다.
how?
apply, call을 이용하여 Array.prototype 함수 호출
배열 비슷한 arguments 객체를 사용하여 인자를 리스트로 가져오는
```javascript
function foo() {
var arr = Array.prototpye.slice.call(arguments);
arr.push("bam"); // 배열
}
이는 비권장 -> Array.from()으로 대체
2.2 문자열
문자배열과 비교
공통점
length, indexOf(), concat()메서드 가진다.
차이점
문자열은 불변!이 포인트
대부분의 배열 메서드는 사실상 문자열에 쓸 수 x -> 문자열에 대해 불변 배열 메서드(⇣1)를 빌려 쓸 수는 있다.
배열 매서드를 사용하려면
1.문자열 -> 배열
2.배열메서드 사용
3.join을 사용하여 다시 배열 -> 문자열
2.3 숫자
정수 따로 구분 없이 부동 소수점 숫자도 아우른다
js에서 정수란? 부동 소수점 값이 없는 값
부동 소수정 표준은 IEEE 754
2.3.1 숫자 구문
10진수 기본
소수점 기준 앞뒤 0은 생략 가능
아주 크거나 작은 값은 지수형으로 표시, toExponential( ) 메서드의 결괏값과 같다
toFixed(), toPrecision()를 통해 소숫자리 지정
2.3.2 작은 소수값
0.1 + 0.2 === 0.3 (false)
왜냐 ? 0.1 은 실제로는 0.1000003 이런식
그렇다면 어떻게 비교?
반올림 오차 Number.EPSILON으로 비교
function compare(a,b) {
return Math.abs(n1 - n2) < Number.EPSILON
}
부동소수점 최대, 최소 범위는 : Number.MAX_VALUE, Number.MIN_VALUE
2.3.3 안전한 정수 범위
안전하게? 즉, 표현값과 실제 값이 정확하게 일치한다고 (정수에 한해) 장담횔 수 있는
NUMBER.MAX_SAFE_INTEGER, NUMBER.MIN_SAFE_INTEGER
이것보다 큰수는 라이브리러닌 유틸리티 사용해라
2.3.4 정수인지 확인
Number.isInteger()
Numer.isSafeInteger()
2.3.5 32비트 정수
32비트 숫자에만 가능한 연산 -> a | b (비트 or 연산자)
※ Nan, Infinity 일부 특수 연산자는 32비트에서 안전하지 않음!
2.4 특수 값
2.4.1 값 아닌 값
undefined: 실종된 값
null:빈 값
void a => 이거는 결과값 undefined 로 만듦
근데 굳이 사용하지 말고 걍 return 사용한다
2.4.3 특수 숫자
1.NaN : 숫자 아님 , 어떤 값과도 동등하지 않다.
isNan() 함수가 NaN 여부를 말해준다.
하지만 isNan()의 단점은 다른 타입도 Nan으로 표시한다는 것
따라서 isNan() => Number.isNan()으로
2.무한대
무한대/무한대는 Nan
양수/무한대는 0
3.(0)
보통의 0과 음의 0이 있다.
-0을 문자화하면 "0"
문자열에서 숫자로 바꾸면 있는 그대로
음의 0 존재이유는 방향성을 알기위해(애니메이션 등)
2.4.4 특이한 동등 비교
이런 특이한 동등비교를 위해 Object.is()가 등장 (==, === 가 아전한 경우라면 사용 x)
2.5 값 vs 레퍼런스
포인터 개념도 없고 참조 방법도 다르다. 어떤 변수가 다른 변수 참조 x
=> 자바스크립트 레퍼런스란 공유된 값을 가르키므로 서로 다른 10개의 레퍼런스가 있다면 이들은 저마다
항상 공유된 단일값을 개별적으로 참조
값의 타입으로 값- 복사, 레퍼런스-복사 결정
프리미티브 타입 -> 복사
객체나 함수-> 레퍼런스 복사
2.1 배열
a[1]; undefined
이는 비권장 -> Array.from()으로 대체
2.2 문자열
문자배열과 비교
2.3 숫자
정수 따로 구분 없이 부동 소수점 숫자도 아우른다 js에서 정수란? 부동 소수점 값이 없는 값 부동 소수정 표준은 IEEE 754
2.3.1 숫자 구문
2.3.2 작은 소수값
왜냐 ? 0.1 은 실제로는 0.1000003 이런식
그렇다면 어떻게 비교? 반올림 오차 Number.EPSILON으로 비교
2.3.3 안전한 정수 범위
안전하게? 즉, 표현값과 실제 값이 정확하게 일치한다고 (정수에 한해) 장담횔 수 있는 NUMBER.MAX_SAFE_INTEGER, NUMBER.MIN_SAFE_INTEGER 이것보다 큰수는 라이브리러닌 유틸리티 사용해라
2.3.4 정수인지 확인
Number.isInteger() Numer.isSafeInteger()
2.3.5 32비트 정수
32비트 숫자에만 가능한 연산 -> a | b (비트 or 연산자) ※ Nan, Infinity 일부 특수 연산자는 32비트에서 안전하지 않음!
2.4 특수 값
2.4.1 값 아닌 값
undefined: 실종된 값 null:빈 값
void a => 이거는 결과값 undefined 로 만듦 근데 굳이 사용하지 말고 걍 return 사용한다
2.4.3 특수 숫자
1.NaN : 숫자 아님 , 어떤 값과도 동등하지 않다. isNan() 함수가 NaN 여부를 말해준다. 하지만 isNan()의 단점은 다른 타입도 Nan으로 표시한다는 것 따라서 isNan() => Number.isNan()으로
2.무한대
양수/무한대는 0
3.(0) 보통의 0과 음의 0이 있다.
2.4.4 특이한 동등 비교
이런 특이한 동등비교를 위해 Object.is()가 등장 (==, === 가 아전한 경우라면 사용 x)
2.5 값 vs 레퍼런스
포인터 개념도 없고 참조 방법도 다르다. 어떤 변수가 다른 변수 참조 x => 자바스크립트 레퍼런스란 공유된 값을 가르키므로 서로 다른 10개의 레퍼런스가 있다면 이들은 저마다 항상 공유된 단일값을 개별적으로 참조