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

JavaScript/2011년스터디/JSON-js분석

From ZeroWiki
Revision as of 09:03, 18 February 2011 by imported>rabierre

[[pagelist(^JavaScript/2011년스터디)]]

지혜

지혜

  • 알아낸 것
    • 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함수를 못 봤다. 다음 시간에..

정근

수경

  • 의문점
    • line 177 : Date.prototype.toJSON = function (key) 에서 key는 왜 넘겨주는가?
    • line 195 : cx의 의미는 무엇인가?
    • line 237 : value는 왜 holder[key]로 가져오는가?
  • 더 알고 싶은 것
    • Javascript의 strict mode