= [JavaScript] [VS] [JSON] 둘은.. 사실 많이 다르다. == [JSON] ↔ [JavaScript] Object ~~쌩으로 `eval`하지 말고, `json2`를 써서 파싱하자. --[2014-06-03]~~ * ~~[http://blog.outsider.ne.kr/257 Outsider - JSON Text를 JSON Object로 변환하기]~~ * ~~https://github.com/douglascrockford/JSON-js ~~ 옛날 얘기다. IE7 까지는 지원되지 않아서 `eval()`을 사용했었는데, 이게 쌩 스크립트 실행이다 보니 보안 이슈가 생길 가능성이 높아, `JSON2`를 써서 deserialize했었다. 다른 브라우저는 당연히 잘 되고, IE8 부터 내장되어 있는 `JSON.stringify()`와 `JSON.parse()`를 쓰면 된다. * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse --[2018-03-12] == `undefined`, `NaN`, `Infinity` [JSON]에서 허용하는 Literal은 object literal, array literal, number literal, string literal, `false`, `null`, `true` 밖에 없다. 즉 허용되는 Literal에 `undefined`, `NaN`, `Infinity`가 빠져있다. 그래서 표준([https://www.ecma-international.org/ecma-262/5.1/#sec-15.12.3])에 보면 `JSON.stringify()`는 `undefined`인 필드는 serialize하지 않으며, `NaN`과 `Infinity`는 `null`로 serialize한다고 나와있다. 처음에는 값이 `undefined`인 필드를 `JSON.stringify()`가 render하지 않아서, 왜 이렇게 구현되어 있는지 이해가 가지 않았는데, [JSON]의 스펙이 그런걸 어쩌랴.. --[2018-03-12]