📗
TIL
  • About
  • javascript
    • GoodParts
      • 프로토타입 방식
      • RegexComponent
      • 재귀적 호출 (Recursive Call)
      • 객체를 기술하는 객체
      • 예외 (Exception)
      • 호출
      • 문자열 (Strings)
      • 참조 (Reference)
      • 배열의 특성들
      • 숫자 (Numbers)
      • 메모이제이션 (Memoization)
      • 모듈 (Module)
      • 열거 (Enumeration)
      • 정규 표현식
      • 정규 표현식 객체 생성
      • 프로토타입 (Prototype)
      • 콜백 (Callback)
      • 문장 (Statements)
      • 함수 표현식 요약
      • 의사 클래스 방식 (Pseudoclassical)
      • 함수를 사용한 방식
      • 클로저 (Closer)
      • 배열 (Array)
      • 기본 타입에 기능 추가
      • 자바스크립트 분석
      • 인수 배열(arguments)
      • Function
      • 유효범위(Scope)
    • YouDon'tKnowJS
      • 타입
      • Native
      • 명시적 강제변환
      • 문자열
      • 함수 vs 블록 스코프
      • 클로저
      • 배열
      • 숫자
      • 연산자 우선순위
      • 스코프
      • 암시적 강제변환
      • 래퍼
      • Statement
      • 호이스팅
      • Coercion
    • javascript
Powered by GitBook
On this page
  • 숫자 구문
  • 작은 소수값
  • 특수 값
  • 값 vs 레퍼런스

Was this helpful?

  1. javascript
  2. YouDon'tKnowJS

숫자

  • 자바스크립트의 숫자 타입은 number가 유일

  • 사실 진정한 정수가 없고, 정수를 부동 소수점 값이 없는 값 (42.0 == 42)

숫자 구문

  • 아주 크거나 아주 작은 숫자는 지수형으로 표시하며 toExponential() 메서드의 결과와 같다

var a = 5E10;
a; // 50000000000
a.toExponential(); // 5e+10

var b = a * a;
b; // 2.5e+21

var c = 1 / a;
c; // 2e-11

작은 소수값

0.1 + 0.2 === 0.3; // false

이를 해결하기 위해 미세한 '반올림 오차'를 허용 공차로 처리한다 이를 '머신 입실론'이라 하는데 자바스크립트에서는 Number.EPSILON = Math.pow(2, -52);로 정의됨

function numbersCloseEnoughToEqual(n1, n2) {
    return Math.abs(n1-n2) < Number.EPSILON;
}

var a = 0.1 + 0.2;
var b = 0.3;

numbersCloseEnoughToEqual(a, b) // true
numbersCloseEnoughToEqual(0.0000001, 0.0000002); // false

특수 값

  • 값 아닌 값

    • undefined: 값을 아직 가지지 않은 것 (Empty)

    • null: 예전에 값이 있었지만 지금은 없는 상태 (Nonvalue)

  • undefined

    • 느슨한 모드에서는 전역 스코프에서 undefined란 식별자에 값을 할당할 수 있다

function foo() {
    undefined = 2;
}

foo();

function foo() {
    "use strict";
     undefined = 2; // 타입 에러 발생!
}

foo();

값 vs 레퍼런스

  • 자바스크립트는 포인터라는 개념 자체가 없고 참조하는 방법도 조금 다름

  • 자바스크립트에서 레퍼런스는 (공유된) 값을 가리키므로 서로 다른 10개의 레퍼런스가 있다면 이들은 저마다 항상 공유된 단일 값을 개별적으로 참조함

  • 값의 타입만으로 값-복사 레퍼런스-복사 둘 중 한쪽이 결정됨

var a = 2;
var b = a; // b는 언제나 a에서 값을 복사함

b++;
a; // 2
b; // 3

var c = [1, 2, 3];
var d = c; // d는 공유된 [1, 2, 3] 값의 레퍼런스
d.push(4);

c; // [1, 2, 3, 4]
d; // [1, 2, 3, 4]

null, undefined, string, number, boolean, symbol 같은 단순 값(스칼라 원시값)은 언제나 값-복사 방식으로 할당/전달됨

객체나 함수 등 합성 값은 할당/전달 시 반드시 레퍼런스 사본을 생성함

function foo(x) {
    x.push(4);
    x; // [1, 2, 3, 4]

    // 그 후
    x = [4, 5, 6];
    x.push(7);
    x; // [4, 5, 6, 7]
}

var a = [1, 2, 3];
foo(a);

a; // [1, 2, 3, 4]
Previous배열Next연산자 우선순위

Last updated 4 years ago

Was this helpful?