728x90
챕터 2 ) 값 Value
🔸 배열 : JS에서는 문자열, 숫자, 객체, 배열까지 담을 수 있다.(배열을 담을 경우 다차원 배열이 된다)
🔸 문자열 : 문자열과 배열은 비슷하지만, 문자열을 "불변값" 이고, 배열은 "가변값" 이다.
🔘 문자열은 불변값 이므로 메서드에서의 내용변경은 새로운 문자열 생성 후 반환된다.
🔸 숫자
🔹 JS에서 유일한 숫자타입 : Number ➡ 정수, 부동 소숫점 숫자 등...
(64 바이너리 사용)
🔹 숫자구문
- 10진수 리터럴로 표시
- 소숫점 앞 정수가 0이면 생략가능(0.42 ➡ .42)
- 소숫점 이하가 0일때도 생략 가능(42.0 ➡ 42.)
- 아주 크거나 작은 수는 지수형으로 표시( .toExponontial 메서드 사용 )
- 숫자값은 Number 객체로 박싱할 수 있기에 Number.prototype 메서드로 접근 가능
🔹 작은 소수 값
- 작은 소수 값 비교는 "반 올림 오차" 와 "허용 공차" 로 처리 가능
( 미세한 오차 ➡ "머신 입실론", JS의 머신 입실론은 2^-52 ) - ES6 부턴 Number.EPSILON으로 정의
두 숫자의 (반올림 허용 오차 이내) 동등함을 비교 가능
Math.abs((0.1 + 0.2) - (0.3)) < Number.EPSILON
🔘 머신 입실론 : 컴퓨터가 다룰 수 있는 가장 작은 수
🔹 안전한 정수 범위
- 정수는 최대 2^53-1 까지 안전하게 표현이 가능하다.
🔘 BD 등 에서 큰 수를 처리하는 것은 부담이 될 수 있기에 JS 문자열 타입으로 저장 해야 한다.
🔹 정수인지 확인
- Number.isInteger() 로 정수 여부 확인 가능
- Number.isSafeInteger() 로 안전한 정수 여부 확인 가능
🔹 32비트 (부호 있는) 정수
- 32비트 숫자에만 가능한 연산이 있으므로 실제 범위가 줄어든다.
🔸 특수값
🔹 값이 아닌 값
- null은 식별자가 아닌 특별한 키워드 이므로 null 이라는 변수에 뭔가 할당하는 것이 불가능
하지만, undefined는 식별자로 사용 가능하다.
🔹 undefined
아주 비추하지만 느슨한 모드에서는 전역 스코프에서 undefined란 식별자에 값 할당이 가능하다......- 🔘 void ~ 는 항상 어느 값이든 무효화 시켜 결과값을 undefined로 만든다.
어떤 표현식의 결과값이 없다는 것을 확실히 밝힐 때 좋다.
정리 : void 연산자는 값이 존재하는 곳에서 그 값이 undefined가 되어야 좋은 곳에서만 사용하자
🔹 특수숫자
- NaN (Not a Number)
글자 그대로 숫자 아님이지만, 유요하지 않은 숫자 혹은 실패한 숫자라고 생각하자.
NaN은 자기 자신과도 동등하지 않은 유일한 값이다.
isNaN을 사용해 여부를 따질수는 있지만, 2/"foo" 같은 값이 isNaN 했을 경우
true라고 나오는 문제가 있기 때문에 Number.isNaN()을 사용하자. (Number.isNaN()은 ES6부터 추가됬다) - 무한대
연산 결과가 너무 커서 표시가 어려울 때 "가장 가까운 수로 반올림" 모드가 결과값을 정한다.
JS에서는 "무한대/무한대" 는 NaN이다. - 영(0)
JS에서는 +0 과 -0이 있다. ( 덧셈과 뺄셈에서는 -0이 나오지 않고, 곱셈과 나눗셈에서만 나온다 )
-0을 문자열화 하면 "0"이 나온다.
반대로 Number("-0"), +"-0", JSON.parse("-0") 들은 모두 -0이 나온다.
또한 비교 연산에서 -0과 0은 같다고한다.
🔘 어떤 변수값이 0에 도달하여 부호가 바뀌는 순간, 정보 소실을 방지해주는 셈이다. - 특이한 동등 비교
ES6 부터 지원하는 Object.is()는 두 값이 절대적으로 동등한지 확인해준다.
주로 NaN, -0과 같이 특이한 값 비교에서 주로 사용한다.
🔸 값 vs 레퍼런스
JS에서는 포인터라는 개념이 없고, 어떤 변수가 다른 변수를 참고할 수 없다.
JS에서 레퍼런스는 (공유된)값을 가츠키므로 저마다 항상 공유된 단일값을 참조한다.
🔘 포인터 : 다른 변수 혹은 변수의 메모리 공간 주소를 가르키는 변수
🔘 null, undefined, string, number, symbol 같은 단순 값은 값-복사 방식으로 할당/전달 한다.
🔘 객체나 함수등 합성 값은 할당/전달 시 레퍼런스 사본을 생성한다.
🔘 레퍼런스를 이용해 값 자체를 바꿀 수는 있지만 새 값을 재할당 하는 것은 불가능하다.
728x90
'JavaScript > You Don't know JS' 카테고리의 다른 글
JS 복습 1주차 / 4. 강제 변환 Coercion (0) | 2022.11.07 |
---|---|
JS 복습 1주차 / 3. 네이티브 (0) | 2022.11.07 |
JS 복습 1주차 / 1. 타입 (0) | 2022.11.05 |
I don't know JS YET) 문법 - 함수 인자 (0) | 2022.07.10 |
I don't know JS YET) 문법 - 에러 (0) | 2022.07.10 |