- 알아낸 것
- stringify의 return문에서 쓰는 fake root의 역할
- str함수 내에서 object, object array등을 처리할때 재귀적으로 들여쓰기를 처리해준다. 디테일이 살아있어
// 배열 처리
// 배열은 partial 배열에 처리하는듯
if (Object.prototype.toString.apply(value) === '[object Array]') {
length = value.length;
for (i = 0; i < length; i += 1) {
partial[i] = str(i, value) || 'null'; // 시밤 재귀냐
}
v = partial.length === 0 ? '[]' : gap ?
'[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' :
'[' + partial.join(',') + ']';
gap = mind;
return v;
}
- 자바스크립트의 strict모드 (레식이 홈피참고(http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/))
"use strict"
- 의문점
- cx가 무슨뜻이지? cx와 escapable의 정규표현식들의 값이 뭐지?
- toJSON에서 key를 파라메터로 넘기는 이유(코드내에서 사용하지는 않는다)
if (typeof Date.prototype.toJSON !== 'function') {
Date.prototype.toJSON = function (key) {
return isFinite(this.valueOf()) ?
this.getUTCFullYear() + '-' +
f(this.getUTCMonth() + 1) + '-' +
f(this.getUTCDate()) + 'T' +
f(this.getUTCHours()) + ':' +
f(this.getUTCMinutes()) + ':' +
f(this.getUTCSeconds()) + 'Z' : null;
};
// String 객체
String.prototype.toJSON =
Number.prototype.toJSON =
Boolean.prototype.toJSON = function (key) { // 왜 key를 넣는거지!!
return this.valueOf();
};
}
// 뭐가 먼저일까요?
// 1. partial.length === 0 ? '{}' : gap, gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' : '{' + partial.join(',') + '}'
// 2. gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' : '{' + partial.join(',') + '}', partial.length === 0 ? '{}' : gap
v = partial.length === 0 ? '{}' : gap ?
'{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' :
'{' + partial.join(',') + '}';
- parse함수를 못 봤다. 다음 시간에..
- riviver의 역할도 다음시간에