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"