원시값 메서드
자바스크립트의 특징 중 하나는 원시값을 객체처럼 사용할 수 있다는 것이다. 즉, 원시값에서도 객체에 메소드가 있는 것처럼 메소드를 호출할 수 있다. 하지만 원시값은 객체가 아니다.
원시값은 값 형태가 맞아서 단일 형태는 맞지만, String
, Number
, Boolean
, Symbol
이라는 원시 래퍼 객체에 접근할 수 있다. 원시 래퍼 객체는 원시값이 메소드나 프로퍼티에 접근할 때 추가 기능을 사용할 수 있게 해주는 객체이다.
let str = "Hello";
alert( str.toUpperCase() ); // HELLO
- 문자열이 str라는 변수는 원시값이지만, 원시값의 프로퍼티인
toUpperCase
에 접근하는 순간 객체가 만들어지는데, 이 객체에서toUpperCase
라는 메소드를 가지고 있다. - 그렇게 메소드가 실행되고, 이 메소드가 실행한 결과값인 원시값이 새로운 문자열로 반환된다.
- 만들어진 객체는 없어지고, 반환된 원시값인 str만 남는다.
Number 메소드
모던 자바스크립트에서는 숫자 자료형이 두 가지가 있다. 일반적인 숫자는 Number
, 그리고 다른 하나는 BigInt
라는 숫자 자료형이다. BigInt
는 2의 53 제곱 이상의 큰 수에서 사용되는 숫자 자료형이다.
-
큰 수 작은 수
큰 숫자나 작은 숫자를 사용해야할 경우, 0을 너무 많이 입력하는 것은 가독성이 떨어지기 때문에 아래와 같이 사용할 수 있다.
1e3 = 1 * 1000
1.23e6 = 1.23 * 1000000
// 10을 세 번 거듭제곱한 수로 나눔
1e-3 = 1 / 1000 (=0.001)
// 10을 여섯 번 거듭제곱한 수로 나눔
1.23e-6 = 1.23 / 1000000 (=0.00000123)
- 16진수, 8진수, 6진수
자바스크립트를 지원하는 진법은 세 가지가 있다. 이를 사용하는 방법은 다음과 같다.
// 16
alert( 0xff ); // 255
alert( 0xFF ); // 255 (대·소문자를 가리지 않으므로 둘 다 같은 값을 나타냅니다.)
let a = 0b11111111; // 255의 2진수
let b = 0o377; // 255의 8진수
alert( a == b ); // true, 진법은 다르지만, a와 b는 같은 수임
- toString(base)
num.toString(base)
메서드는 base진법으로 num을 표현한 후, 이를 문자형으로 변환해 반환합니다.
let num = 255;
alert( num.toString(16) ); // ff
alert( num.toString(2) ); // 11111111
부정확한 계산
숫자는 내부적으로 64비트 형식으로 표현된다. 그래서 숫자를 저장하려면 정확히 64비트가 필요하다. 그 중 52비트는 숫자를 저장하는데 사용되고, 11비트는 소수점 위치, 1비트는 부호를 저장하는 데에 사용된다.
숫자가 너무 커져서 64비트보다 커질 경우, Infinity
로 처리된다.
alert( 0.1 + 0.2 == 0.3 ); // false