JavaScript 데이터 타입 및 변수 스코프 핵심 개념

JavaScript는 모든 숫자를 IEEE 754 64비트 부동소수점 형식으로 처리합니다. 이 형식은 ±1.798×10³⁰⁸ 범위의 수를 표현할 수 있으나, 정수는 -2⁵³에서 2⁵³ 사이에서만 정확하게 표현됩니다. 이 범위를 벗어나면 정밀도가 손실됩니다.

// 10의 3제곱 계산
Math.pow(10, 3); // 1000

// 소수점 반올림
Math.round(0.7); // 1

// 올림 처리
Math.ceil(3.2); // 4

// 내림 처리
Math.floor(4.9); // 4

// 절대값
Math.abs(-7.5); // 7.5

// 최대값 찾기
Math.max(15, 25, 35); // 35

// 랜덤 수 생성
Math.random(); // 0 이상 1 미만

// π 값
Math.PI; // 3.141592653589793

// 제곱근 계산
Math.sqrt(25); // 5

// 지수 계산
Math.exp(1); // e ≈ 2.71828

수치 연산 시 발생하는 특수 값 처리:

// 초과 범위 (양수)
1e309; // Infinity

// 초과 범위 (음수)
-1e309; // -Infinity

// 미만 범위
5e-325; // 0

// 0으로 나누기
10 / 0; // Infinity

-10 / 0; // -Infinity

0 / 0; // NaN

NaN 처리 특징:

isNaN("문자열"); // true
isFinite(Infinity); // false
isFinite(100); // true

NaN === NaN; // false

부동소수점 정밀도 문제 예시:

0.1 + 0.2 === 0.3; // false (0.30000000000000004)

문자열은 불변의 16비트 유니코드 시퀀스로 처리됩니다. UTF-16 인코딩을 사용하며, 일부 유니코드 문자는 두 개의 16비트 값(서로게이트 쌍)으로 표현됩니다.

const text = "JavaScript";
text[1]; // 'a' (ES5+)
text.charAt(1); // 'a'

text.substring(0, 4); // "Java"
text.slice(-6); // "Script"
text.indexOf("S"); // 4
text.replace("J", "j"); // "javaScript"
text.toUpperCase(); // "JAVASCRIPT"

정규 표현식 사용 예시:

const pattern = /\d{3}-\d{2}-\d{4}/;
"123-45-6789".match(pattern); // ["123-45-6789"]

/^[\w]+@[a-z]+\.[a-z]{2,3}$/; // 이메일 패턴

불리언 값은 true 또는 false이며, 다음 값은 false로 변환됩니다: undefined, null, 0, -0, NaN, 빈 문자열.

null과 undefined는 서로 다른 개념입니다:

null == undefined; // true
null === undefined; // false

typeof null; // "object"
typeof undefined; // "undefined"

전역 객체는 브라우저 환경에서 window, Node.js 환경에서 global로 접근 가능합니다. this 키워드로 참조할 수 있습니다.

프리미티브 타입(문자열, 숫자, 불리언)은 속성 접근 시 임시 객체로 변환됩니다. 이를 패키징 객체라고 합니다.

const str = "example";
str.length; // 7 (임시 String 객체 생성)

typeof str; // "string"
typeof new String(str); // "object"

"" == new String(""); // true
"" === new String(""); // false

타입 변환 규칙:

Number("42"); // 42
String(42); // "42"
Boolean(0); // false

"5" + 10; // "510" (문자열 연결)
+"42"; // 42 (숫자 변환)
!!0; // false (불리언 변환)

변수 스코프는 함수 단위로 정의됩니다. var로 선언된 변수는 함수 전체에 걸쳐 유효하며 호이스팅 현상이 발생합니다.

function scopeExample() {
  console.log(value); // undefined (호이스팅)
  var value = 10;
  console.log(value); // 10
}

// 블록 스코프 없음
if (true) {
  var blockVar = 5;
}
console.log(blockVar); // 5

ES6부터 let과 const를 사용해 블록 스코프를 지원합니다. let으로 선언된 변수는 블록 내에서만 유효합니다.

if (true) {
  let blockScoped = 10;
}
console.log(blockScoped); // ReferenceError

태그: JavaScript ieee-754 type-conversion variable-scope string-manipulation

9월 3일 09:00에 게시됨