New In Javascript 1.8.1

이글은 Mozilla의 'New In Javascript 1.8.1'를 정리한 것이다.

Language additions

Object.getPrototypeOf()

getPrototypeOf(번역)대한 John Resig의 글을 참고

Using native JSON

Object -> JSON은 stringify()로 하고 JSON -> Object은 parse()메소드를 이용한다. 그리고 JSON은 method가 포함된 객체를 지원하지 않는다. 만약 JSON으로 method가 포함된 객체를 변환하고자 하면 TypeError를 던질 것이다.

parse()는 다음과 같이 사용하면 된다:

var jsObject = JSON.parse(jsonString);

단 다음과 같은 것은 에러가 나니 주의:

// both will throw an SyntaxError as of JavaScript 1.8.5
var jsObject = JSON.parse("[1, 2, 3, 4, ]");
var jsObject = JSON.parse("{ \"foo\" : 1, }");

stringify()는 다음과 같이 사용한다.

var foo = {};
foo.bar = "new property";
foo.baz = 3;

var jsonString = JSON.stringify(foo);
//jsonString = {"bar":"new property","baz":3}

stringify()의 문법은 다음과 같다.

jsonString = JSON.stringify(value [, replacer [, space]])
  • value: 객체
  • replacer: replacer는 프로퍼티를 선별적으로 변환할 때 사용한다. 만약 replacer가 생략되거나 null이면 모든 프로퍼티를 변환한다.
  • space: space는 JSON String을 사람이 읽기 좋도록 예쁘게 만들어 준다. space가 Number면 그 수만큼 space 문자로 공백을 줄 것이고 String이면 그 스트링을 공백으로 사용한다. 물론 둘다 최대크기는 10이다. 그 보다 큰 값이 입력됐을 때 Number는 10이, String은 앞 10자만 사용될 것이다.

replacer를 사용하는 예제를 보자:

function censor(key, value) {
  if (typeof(value) == "string") {
    return undefined;//or return null
  }
  return value;
}

var foo = {foundation: "Mozilla", model: "box", week: 45, transport: "car", month: 7};
var jsonString = JSON.stringify(foo, censor);
//jsonString = {"week":45,"month":7}

replacer에 function대신 Arrray를 사용할 수도 있다:

console.log(JSON.stringify({ a: 2, b:3 }, ['a']));
//{"a":2}

space를 사용하는 예제를 보자:

console.log(JSON.stringify({ a: 2 }, null, "  "));
// '{\n "a": 2\n}'

해당 객체마다 custom하게 JSON으로 serialize하고 싶으면 toJSON프로퍼티에 메소드를 할당하면 된다:

var x = {
  foo: 'foo',
  toJSON: function () {
    return 'bar';
  }
};
var json = JSON.stringify({x: x});
//json = {"x":"bar"}

String.trim(), trimLeft(), trimRight()

공백 문자를 제거하는 함수가 추가됨:

var orig = "   foo  ";
console.log(orig.trim());// "foo"

왼쪽 것만 제거:

console.log(orig.trimLeft());// "foo  "

오른 쪽 것만 제거:

console.log(orig.trimLeft());// "  foo"