More actions
imported>linflus No edit summary |
imported>rabierre No edit summary |
||
| Line 3: | Line 3: | ||
* [https://github.com/douglascrockford/JSON-js JSON-js] 코드 분석하기 | * [https://github.com/douglascrockford/JSON-js JSON-js] 코드 분석하기 | ||
== 지혜 == | == 지혜 == | ||
== 지혜 == | |||
* 알아낸 것 | |||
** 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함수를 못 봤다. 다음 시간에.. | |||
== 정근 == | == 정근 == | ||
== 수경 == | == 수경 == | ||
Revision as of 09:03, 18 February 2011
[[pagelist(^JavaScript/2011년스터디)]]
- JSON-js 코드 분석하기
지혜
지혜
- 알아낸 것
- 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함수를 못 봤다. 다음 시간에..
정근
수경
- 의문점
- line 177 : Date.prototype.toJSON = function (key) 에서 key는 왜 넘겨주는가?
- line 195 : cx의 의미는 무엇인가?
- line 237 : value는 왜 holder[key]로 가져오는가?
- 더 알고 싶은 것
- Javascript의 strict mode