[요약] Javascript Definitive Guide

2 분 소요

JavaScript - The Definitive Guide(David Flanagan)에서 몰랐거나 중요하다고 생각하는 부분을 정리하였습니다.

숫자형 타입(number)

  • 정수, 실수 구분 없이 64비트 부동소수점 타입으로 저장한다.
  • 단, 배열 인덱싱이나 비트 연산시에는 32비트 정수를 사용한다.

  • 16진법의 숫자 표기(e.g. 0xaf)는 표준으로 지원한다.
  • 8진법의 숫자 표기(e.g. 012)는 일부 구현만 지원하므로 사용하지 않는 것이 좋다.

오버플로우, 언더플로우, 0으로 나누기 등의 상황에서 에러를 발생시키지 않고 특별한 값을 반환한다.

  • 오버플로우: Infinity, NUMBER.POSITIVE_INFINITY
  • 언더플로우: -Infinity, NUMBER.NEGATIVE_INFINITY
  • 0을 0으로 나누기: NaN
  • 0-0
var zero = 0;     // Regular zero
var negz = -0;    // Negative zero 
zero === negz     // => true: zero and negative zero are equal
1/zero === 1/negz // => false: infinity and -infinity are not equal

실수 비교는 위험하다. 다음 예시를 보자.

var x = .3 - .2;  // thirty cents minus 20 cents
var y = .2 - .1;  // twenty cents minus 10 cents
x == y            // => false: the two values are not the same!
x == .1           // => false: .3-.2 is not equal to .1
y == .1           // => true: .2-.1 is equal to .1

Date() 객체

var then = new Date(2010, 0, 1);
var later = new Date(2010, 0, 1, 17, 10, 30);
var now = new Date();
var elapsed = now - then;
later.getFullYear()
later.getMonth()
later.getDate()
later.getDay()
later.getHours()
later.getUTCHours()
later.toString()
later.toUTCString()
later.toLocaleDateString()
later.toLocaleTimeString()
later.toISOString()

문자열

문자열은 UTF-16을 사용하여 한 문자당 16비트씩 차지한다. 단, 반드시 모든 유니코드 문자가 16비트 안에 들어오는 것은 아니기 때문에 아래와 같은 상황이 발생할 수는 있다.

var p = "π"; // π is 1 character with 16-bit codepoint 0x03c0
var e = "e"; // e is 1 character with 17-bit codepoint 0x1d452
p.length     // => 1: p consists of 1 16-bit element
e.length     // => 2: UTF-16 encoding of e is 2 16-bit values: "\ud835\udc52"

관련 메소드들

var s = "hello, world"// Start with some text.
s.charAt(0)           // => "h": the first character.
s.charAt(s.length-1)  // => "d": the last character.
s.substring(1,4)      // => "ell": the 2nd, 3rd and 4th characters.
s.slice(1,4)          // => "ell": same thing
s.slice(-3)           // => "rld": last 3 characters
s.indexOf("l")        // => 2: position of first letter l.
s.lastIndexOf("l")    // => 10: position of last letter l.
s.indexOf("l", 3)     // => 3: position of first "l" at or after 3

/* ECMA5 */
s[0] // => 'h'

패턴매칭

RegExp()

var text = "testing: 1, 2, 3"; // Sample text
var pattern = /\d+/g           // Matches all instances of one or more digits
pattern.test(text)             // => true: a match exists
text.search(pattern)           // => 9: position of first match
text.match(pattern)            // => ["1", "2", "3"]: array of all matches
text.replace(pattern, "#");    //=> "testing: #, #, #"
text.split(/\D+/);             // => ["","1","2","3"]: split on non-digits

댓글남기기