U E D R , A S I H C RSS

Java Script/2011년스터디/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;
}

"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는 왜 holderkey로 가져오는가?
  • ë�” 알고 ì‹¶ì�€ 것
    • Javascriptì�˜ strict mode
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:30
Processing time 0.4995 sec