[ javascript ] 공식문서 읽고 열흘 벼락치기: Numbers and Strings

김쟇연·2025년 9월 8일
post-thumbnail

📝 Day 05 – 숫자와 문자열 (Numbers and Strings)

공식 문서 해당 챕터 바로가기 ! 🐱

들어가며

JavaScript를 배우다 보면 가장 먼저 만나는 놈들이 있다. 바로 숫자(Number)문자열(String)이다.

계산을 하든 텍스트를 후려 다루든, 결국 모든 로직은 이 둘 위에 올려놓고 굴려진다. 이번 장에서는 숫자와 문자열이 어떤 식으로 표현되고, 또 어떤 도구들을 통해 활용할 수 있는지 차근차근 살펴보겠다.


Numbers

JavaScript의 숫자는 모두 64비트 부동소수점(IEEE 754) 형식으로 표현된다.

즉, 정수와 소수를 따로 구분하지 않고 하나의 그릇에 담아 관리한다.

  • 정수는 ±(2^53 − 1) 범위까지 정확히 표현 가능하다.
  • 특별한 값도 세 가지가 있다: Infinity, Infinity, NaN.
console.log(1 / 0);   // Infinity
console.log(-1 / 0);  // -Infinity
console.log(0 / 0);   // NaN

숫자 리터럴

숫자를 적는 방법은 여러 가지가 있다.

  • 10진수: 우리가 평소 쓰는 표기법
  • 2진수: 0b 접두어
  • 8진수: 0o 접두어
  • 16진수: 0x 접두어
42
0b1010
0o755
0xFF

지수 표기도 가능하다.

5e1    // 50
1e-3   // 0.001

긴 숫자는 _ 구분자로 읽기 쉽게 쓸 수 있다.

1_000_000_000
0xA0_B0_C0

Number 객체

숫자와 관련된 상수와 유틸리티 메서드들이 모여 있다.

console.log(Number.MAX_SAFE_INTEGER); // 9007199254740991
console.log(Number.EPSILON);          // 2.220446049250313e-16

판별용 메서드도 있다.

Number.isFinite(123);   // true
Number.isInteger(3.14); // false
Number.isNaN(NaN);      // true

출력 형식 제어:

let n = 1234.567;
n.toFixed(2);      // "1234.57"
n.toExponential(); // "1.234567e+3"

Math 객체

수학 계산이 필요할 때 쓰는 내장 객체다. 직접 만들 필요 없이 바로 가져다 쓴다.

Math.PI;         // 원주율
Math.sqrt(16);   // 4
Math.random();   // 0 이상 1 미만 난수
Math.max(1, 5);  // 5

삼각함수, 로그, 올림/내림 같은 다양한 메서드가 준비돼 있다.


BigInt

Number 타입은 ±(2^53 − 1)을 넘어가면 정밀도가 무너진다. 그 이상의 큰 정수를 다루려면 BigInt를 쓴다.

const big = 123456789012345678901234567890n;
console.log(big * 2n); // 정확하게 연산됨
  • 매우 큰 정수도 정확히 다룰 수 있다.
  • 소수는 표현 불가 → 나눗셈 결과는 항상 0으로 내림.
  • Math 함수와는 함께 사용할 수 없다.

Strings

문자열은 텍스트 데이터를 담는 타입이다. 내부적으로 UTF-16 코드 단위로 구성되며, 첫 글자는 인덱스 0부터 시작한다.

const str = "Hello";
console.log(str[0]);    // "H"
console.log(str.length); // 5

문자열 리터럴

작은따옴표, 큰따옴표, 백틱 모두 문자열을 만들 수 있다.

'foo'
"bar"
`baz`

특수 문자는 이스케이프 시퀀스로 표현한다.

"\xA9"      // "©"
"\u00A9"    // "©"
"\u{1F600}" // 😀

String Object

문자열 값은 곧바로 메서드를 호출할 수 있다.

"hello".toUpperCase(); // "HELLO"

종류별 예시:

  • 검색:
"hello world".includes("world"); // true
  • 분해:
"  hi  ".trim(); // "hi"
  • 조합:
"na".repeat(3); // "nanana"

Template Literals

백틱(`)을 사용하면 문자열이 훨씬 유연해진다.

const name = "Jay";
const age = 28;
console.log(`My name is ${name}, I am ${age} years old.`);
// "My name is Jay, I am 28 years old."

장점 두 가지:

  1. 여러 줄 문자열
console.log(`line 1
line 2`);
  1. 표현식 삽입
const a = 5, b = 10;
console.log(`Fifteen is ${a + b}`); // "Fifteen is 15"

마무리

숫자와 문자열은 단순해 보여도, JavaScript에서는 이 둘을 다루기 위한 장치가 상당히 잘 갖춰져 있다.

  • Number와 Math로 다양한 숫자 계산을 처리하고,
  • BigInt로 정수 범위의 한계를 넘어설 수 있으며,
  • String 메서드와 템플릿 리터럴은 텍스트를 훨씬 간결하게 다룰 수 있게 해준다.

대부분의 코드가 결국 이 두 타입을 주고받으며 움직이기 때문에, 여기서 다룬 도구들을 익숙하게 만들어두는 것이 큰 도움이 된다.

profile
그래도 해야지 어떡해

0개의 댓글