숫자(Number)

3 , 5.5 , 1,000,000 처럼 컴퓨터가 정확히 나타낼 수 있는 숫자도 있지만, 근사치로만 표현할 수 있는 숫자도 많습니다. 예를 들어 𝞹 는 절대 컴퓨터로 표현 할 수 없다. 원주율을 구성하는 숫자는 무한하고 반복되지도 않기 때문이죠. 10/3 같은 숫자는 특별한 테크닉을 써서 나타낼 수 있긴 하지만, 소수점 아래 자리가 무한히 반복 되므로 (3.333⋯) 일반적으로 근사치로만 나타냅니다.

JS도 다른 프로그래밍 언어와 마찬가지로 실제 숫자의 근사치를 저장할 때 IEEE-764 배정도(double-precision) 부동소수점 숫자 형식을 사용한다. 이 형식을 '더블' 이라 지칭합니다.

JS는 정수형 데이터 타입을 하나만 사용한다.

대부분의 프로그래밍 언어는 여러 가지 정수 타입(int short, long)을 사용하며 부동소수점 숫자 타입도 두가지 이상(double , floot)을 사용합니다. 하지만 JS 는 숫자형 데이터 타입이 하나 밖에 없습니다..

장점

  • 숫자 데이터에 사용용도에 따라 데이터 타입을 지정할 필요가 없기 때문에 코딩작성이 간결하고 쉬워진다.
  • 초보자에게 부담이 없다.

단점

  • 고성능 정수 연산이나 정밀한 소수점 연산이 필요한 애플리케이션에서 쓸 수 없다.

JS는 10,2,8,16 진수의 네 가지 숫자형 리터널을 인식한다.

let count = 10;          // 숫자 리터널. count는 더블입니다.
const blue = 0x0000ff;   // 16진수. 16진수 ff는 10진수 255와 같습니다.
const umask = 0o0022;    // 8진수. 8진수 22는 십진수 18과 같습니다.
const roomTmp = 21.5     // 십진수
const c = 3.0e6;         // 지수 (3.0 x 10^6 = 3,000,000)
const e = -1.6e-19;      // 지수 (-1.6 x 10^-19 = 0.00000000000000000016)

JS는 무한대, 음의 무한대, '숫자가 아님' 을 나타내는 특별한 값이 있다.

const inf = Infinity;
const ninf = -Infinity;
const nan = NaN;

이들은 숫자형 값이지만, 계산에 사용하는 숫자라기보다 일종의 플레이스 홀더(placeholder)입니다.

Number 객체 유용한 프로퍼티

const small = Number.EPSILON; // 1에 더했을 때 1과 구분되는 결과를 만들 수 있는 가장 작은 값
                                                            // 근사치는 2.2e-16 입니다.
const bigInt = Number.MAX_SAFE_INTEGER; // 표현할 수 있는 큰 정수
const max = Number.MAX_VALUE;              // 표현할 수 있는 큰 숫자
const minInt = Number.MIN_SAFE_INTEGER;       // 표현할 수 있는 작은 정수
const min = Number.MIN_VALUE;              // 표현할 수 있는 작은 숫자
const nInf = Number.NEGATIVE_INFINITY;      // -Infinity
const nan = Number.NaN;                    // NaN
const inf = Number.POSITIVE_INFINITY;      // Infinity

문자열(String)

String 이라는 단어는 string of characters에서 나왔습니다. 이 표현은 1800년대 후반 식자공들이 일정한 순서로 배열된 심볼을 가리킬 때 썻던 표현이며 나중에는 수학들이 사용했다네요.

String은 텍스트 데이터입니다. JavaScript 문자열은 Unicode 텍스트 기반입니다.

Unicode란 ?

  • 텍스트 데이터에 관한 표준이다. 다른 이름으로는 국제 문자 세트(UCS) 라고도 표기한다.
  • 사람이 사용하는 언어 대부분의 글자(이모티콘 포함)와 심볼에 해당하는 코드 포인트(code point)를 포함하고 있다.
  • 모든 언어의 텍스트를 나타낼수 있지만, 모든 코드 포인트를 정확히 렌더링 한다는 보장은 없다.

JavaScript 문자열 리터널은 작은 따옴표, 큰 따옴표, 백틱(backtick)을 사용합니다.

const extraQuotes = 'extra';
const doubleQuotes = "double";
const backticks = `backtick`;

문자열 이스케이프(Escape)

문자열의 리터널은 따옴표를 사용하든 백틱을 사용하든 시작과 끝을 작성합니다.

                  StartPoint                       EndPoint
const apostrophe  =  '           안녕하세요           '   
const doubleQuotes =  "           안녕하세요           "
const backticks    =  `           안녕하세요           `

이때 StartPoint와 같은 따옴표 혹은 백틱을 사용 하고 싶을 경우 다음과 같이 에러를 발생 할 수 있습니다.

// Error!!
                  StartPoint   EndPoint|StartPoint   EndPoint
const apostrophe   =  '           '안녕하세요'           '
const doubleQuotes =  "           "안녕하세요"           "
const backticks    =  `           `안녕하세요`           `

이를 방지 하기 위해서 역슬래시( \ ) 을 써서 이스케이프 하면 문자열이 여기서 끝나지 않았다고 JS 에 알릴 수 있습니다.

                  StartPoint                           EndPoint
const apostrophe   =  '           \'안녕하세요\'           '
const doubleQuotes =  "           \"안녕하세요\"           "
const backticks    =  `           \`안녕하세요\`           `

역슬래시를 사용 해야 할 경우에도 역슬래시를 이용하여 이스케이프를 할 수 있습니다.

const backSlash = '\\'; // return : \

그렇다면 ' , " , ` 중 무엇을 써야 할까?

책의 저자는 다음과 같이 작성 했습니다.

  • 스스로 정하면 된다.
  • 사용자에게 표시될 텍스트에는 보통 큰따옴표를 사용한다.
  • 따옴표보다 don't 등 아포스트로피를 더 많이 쓰는 편이므로, 큰 따옴표를 쓰는게 필자에게 편하다.
  • 자바스크립트 문자열 안에 HTML을 쓸때는 반대로 작은 따옴표를 쓴다.
  • HTMl 문자열을 작은 따옴표로 감싸면 속성값에 큰 따옴표를 쓸 수 없이 때문이다.

저는 문자 하나 일 경우에는 외 따옴표, 문자열일 경우에는 큰 따옴표를 사용하고 있었습니다.

다른 언어만을 거진 사용하다 보니 그러한 습관이 생겼던 것 같습니다. 책을 보고 난 뒤에는 나도 사용용도를 언어에 맞게 다시 한번 생각해봐야 겠다 라는 생각이 들었습니다.

+ Recent posts