Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

JavaScript/2011년스터디/JSON-js분석: Difference between revisions

From ZeroWiki
imported>rabierre
No edit summary
(Repair batch-0002 pages from live compare)
 
(2 intermediate revisions by 2 users not shown)
Line 1: Line 1:
[[pagelist(^JavaScript/2011년스터디)]]
<!-- 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) === '[object Array]') {
  if (Object.prototype.toString.apply(value) === '&#91;object Array&#93;') {
  length = value.length;
  length = value.length;
  for (i = 0; i &lt; length; i += 1) {
  for (i = 0; i &lt; length; i += 1) {
  partial[i] = str(i, value) || 'null'; // 시밤 재귀냐
  partial&#91;i&#93; = str(i, value) || 'null'; // 시밤 재귀냐
  }
  }
  v = partial.length === 0 ? '[]' : gap ?
  v = partial.length === 0 ? '&#91;&#93;' : gap ?
  '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' :
  '&#91;\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '&#93;' :
  '[' + partial.join(',') + ']';
  '&#91;' + partial.join(',') + '&#93;';
  gap = mind;
  gap = mind;
  return v;
  return v;
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

지혜

  • 알아낸 것
    • 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;
}
"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