Object.stringify

JS version of JSON.stringify, that stringifies also regular expressions,
dates and functions
This commit is contained in:
Mariusz Nowak
2014-06-03 11:07:10 +02:00
parent 239b52fe30
commit f68c029c66
3 changed files with 51 additions and 0 deletions
+1
View File
@@ -35,6 +35,7 @@ module.exports = {
safeTraverse: require('./safe-traverse'),
setPrototypeOf: require('./set-prototype-of'),
some: require('./some'),
stringify: require('./stringify'),
toArray: require('./to-array'),
validCallable: require('./valid-callable'),
validObject: require('./valid-object'),
+25
View File
@@ -0,0 +1,25 @@
'use strict';
var toArray = require('./to-array')
, isDate = require('../date/is-date')
, isRegExp = require('../reg-exp/is-reg-exp')
, isArray = Array.isArray, stringify = JSON.stringify
, keyValueToString = function (value, key) { return stringify(key) + ':' + exports(value); };
module.exports = exports = function (obj) {
if (obj == null) return String(obj);
switch (typeof obj) {
case 'string':
return stringify(obj);
case 'number':
case 'boolean':
case 'function':
return String(obj);
default:
if (isArray(obj)) return '[' + obj.map(exports) + ']';
if (isRegExp(obj)) return String(obj);
if (isDate(obj)) return 'new Date(' + obj.valueOf() + ')';
return '{' + toArray(obj, keyValueToString) + '}';
}
};
+25
View File
@@ -0,0 +1,25 @@
'use strict';
module.exports = function (t, a) {
var fn = function (raz, dwa) { return raz + dwa; };
a(t(), 'undefined', "Undefined");
a(t(null), 'null', "Null");
a(t(null), 'null', "Null");
a(t('raz'), '"raz"', "String");
a(t('raz"ddwa\ntrzy'), '"raz\\"ddwa\\ntrzy"', "String with escape");
a(t(false), 'false', "Booelean");
a(t(fn), String(fn), "Function");
a(t(/raz-dwa/g), '/raz-dwa/g', "RegExp");
a(t(new Date(1234567)), 'new Date(1234567)', "Date");
a(t([]), '[]', "Empty array");
a(t([undefined, false, null, 'raz"ddwa\ntrzy', fn, /raz/g, new Date(1234567), ['foo']]),
'[undefined,false,null,"raz\\"ddwa\\ntrzy",' + String(fn) +
',/raz/g,new Date(1234567),["foo"]]', "Rich Array");
a(t({}), '{}', "Empty object");
a(t({ raz: undefined, dwa: false, trzy: null, cztery: 'raz"ddwa\ntrzy', piec: fn, szesc: /raz/g,
siedem: new Date(1234567), osiem: ['foo', 32], dziewiec: { foo: 'bar', dwa: 343 } }),
'{"raz":undefined,"dwa":false,"trzy":null,"cztery":"raz\\"ddwa\\ntrzy","piec":' + String(fn) +
',"szesc":/raz/g,"siedem":new Date(1234567),"osiem":["foo",32],' +
'"dziewiec":{"foo":"bar","dwa":343}}', "Rich object");
};