More actions
imported>rabierre No edit summary |
(Repair batch-0002 pages from live compare) |
||
| (3 intermediate revisions by 3 users not shown) | |||
| Line 1: | Line 1: | ||
<!-- MONIWIKI PageList(^JavaScript/2011년스터디) --> | |||
* [[JavaScript/2011년스터디]] | |||
* [[JavaScript/2011년스터디/3월이전]] | |||
* [[JavaScript/2011년스터디/7월이전]] | |||
* [[JavaScript/2011년스터디/CanvasPaint]] | |||
* [[JavaScript/2011년스터디/JSON-js분석]] | |||
* [[JavaScript/2011년스터디/URLHunter]] | |||
* [[JavaScript/2011년스터디/김수경]] | |||
* [[JavaScript/2011년스터디/박정근]] | |||
* [[JavaScript/2011년스터디/서지혜]] | |||
* [[JavaScript/2011년스터디/윤종하]] | |||
* [https://github.com/douglascrockford/JSON-js JSON-js] 코드 분석하기 | * [https://github.com/douglascrockford/JSON-js JSON-js] 코드 분석하기 | ||
| Line 8: | Line 18: | ||
// 배열 처리 | // 배열 처리 | ||
// 배열은 partial 배열에 처리하는듯 | // 배열은 partial 배열에 처리하는듯 | ||
if (Object.prototype.toString.apply(value) === ' | if (Object.prototype.toString.apply(value) === '[object Array]') { | ||
length = value.length; | length = value.length; | ||
for (i = 0; i < length; i += 1) { | for (i = 0; i < length; i += 1) { | ||
partial | partial[i] = str(i, value) || 'null'; // 시밤 재귀냐 | ||
} | } | ||
v = partial.length === 0 ? ' | v = partial.length === 0 ? '[]' : gap ? | ||
' | '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' : | ||
' | '[' + partial.join(',') + ']'; | ||
gap = mind; | gap = mind; | ||
return v; | return v; | ||
} | } | ||
** 자바스크립트의 strict모드 (http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/ 레식이 홈피참고) | ** 자바스크립트의 strict모드 ([http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/ 레식이 홈피참고]) | ||
"use strict" | "use strict" | ||
* 의문점 | * 의문점 | ||
| Line 54: | Line 64: | ||
** riviver의 역할도 다음시간에 | ** riviver의 역할도 다음시간에 | ||
== 정근 == | == 정근 == | ||
* 알아낸것 | |||
** perl에서는 "use strict"라고 썻을 경우 선언되지 않은 변수등은 오류로 뜸(프로그래머의 실수 방지) | |||
javastript의 자유 분방함을 제한 perl과 비슷한 역활 | |||
** '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); | |||
//유니코드로 변환하는 과정 : .charCodeAt로 가져온 아스키코드를 toString(16)로 16진수 변환 | |||
// .slice(-4)로 뒤에서 4글자를 추출 | |||
** 직렬화(Serialize, Serialization) 객체를 쉽게 옮길수 있도록 형태를 변환하는 과정 | |||
** 역직렬화(Deserialize, Deserialization) 직렬화와 반대과정 즉 스트링에서 객체를 재구성 | |||
* 의문점 | |||
** '\u'는 유니코드? 그럼 '\x'는 무엇을 나타내는 거지? | |||
** String.prototype.toJSON = | |||
Number.prototype.toJSON = | |||
Boolean.prototype.toJSON = function (key) { | |||
return this.valueOf(); | |||
}; 이부분;;; | |||
** str function에서 'string', 'number', 'boolean', 'null' 은 모두 string로 변환한다. 그런데 'object'의 NULL은 뭐지?? | |||
== 수경 == | == 수경 == | ||
* 의문점 | * 의문점 | ||
| Line 61: | Line 88: | ||
* 더 알고 싶은 것 | * 더 알고 싶은 것 | ||
** Javascript의 strict mode | ** Javascript의 strict mode | ||
Latest revision as of 00:16, 27 March 2026
- JavaScript/2011년스터디
- JavaScript/2011년스터디/3월이전
- JavaScript/2011년스터디/7월이전
- JavaScript/2011년스터디/CanvasPaint
- JavaScript/2011년스터디/JSON-js분석
- JavaScript/2011년스터디/URLHunter
- JavaScript/2011년스터디/김수경
- JavaScript/2011년스터디/박정근
- JavaScript/2011년스터디/서지혜
- 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모드 (레식이 홈피참고)
"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의 역할도 다음시간에
정근
- 알아낸것
- perl에서는 "use strict"라고 썻을 경우 선언되지 않은 변수등은 오류로 뜸(프로그래머의 실수 방지)
javastript의 자유 분방함을 제한 perl과 비슷한 역활
- '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
//유니코드로 변환하는 과정 : .charCodeAt로 가져온 아스키코드를 toString(16)로 16진수 변환 // .slice(-4)로 뒤에서 4글자를 추출
- 직렬화(Serialize, Serialization) 객체를 쉽게 옮길수 있도록 형태를 변환하는 과정
- 역직렬화(Deserialize, Deserialization) 직렬화와 반대과정 즉 스트링에서 객체를 재구성
- 의문점
- '\u'는 유니코드? 그럼 '\x'는 무엇을 나타내는 거지?
- String.prototype.toJSON =
Number.prototype.toJSON =
Boolean.prototype.toJSON = function (key) {
return this.valueOf();
}; 이부분;;;
- str function에서 'string', 'number', 'boolean', 'null' 은 모두 string로 변환한다. 그런데 'object'의 NULL은 뭐지??
수경
- 의문점
- line 177 : Date.prototype.toJSON = function (key) 에서 key는 왜 넘겨주는가?
- line 195 : cx의 의미는 무엇인가?
- line 237 : value는 왜 holder[key]로 가져오는가?
- 더 알고 싶은 것
- Javascript의 strict mode