Skip to content

Instantly share code, notes, and snippets.

@ScalableJS
Last active December 12, 2015 03:28
Show Gist options
  • Save ScalableJS/4706712 to your computer and use it in GitHub Desktop.
Save ScalableJS/4706712 to your computer and use it in GitHub Desktop.
var mm = {
type:(function () {
var class2type = {};
var arr = "Boolean Number String Function Array Date RegExp Object".split(" ");
for (var n = 0; n < arr.length; n++) {
class2type[ "[object " + arr[n] + "]" ] = arr[n].toLowerCase();
}
return function (obj) {
return obj == null ?
String(obj) :
class2type[Object.prototype.toString.call(obj)] || "object";
}
})(),
deserialize:function (str) {
try {
return new Function("return " + str)();
} catch (err) {
//throw (err);
}
},
serialize:(function () {
function formatDate(n) {
return n < 10 ? '0' + n : n
}
var quote = (function () {
var escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
meta = {
'\b':'\\b',
'\t':'\\t',
'\n':'\\n',
'\f':'\\f',
'\r':'\\r',
'"':'\\"',
'\\':'\\\\'
};
return function (string) {
escapable.lastIndex = 0;
return escapable.test(string) ? '"' + string.replace(escapable, function (a) {
var c = meta[a];
return typeof c === 'string' ? c : '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4)
}) + '"' : '"' + string + '"'
}
})();
return function (value) {
var arr = [], strRet, type = this.type(value);
if (type === "date") {
if (isFinite(value.valueOf())) {
value = value.getUTCFullYear() + '-'
+ formatDate(value.getUTCMonth() + 1) + '-'
+ formatDate(value.getUTCDate()) + 'T'
+ formatDate(value.getUTCHours()) + ':'
+ formatDate(value.getUTCMinutes()) + ':'
+ formatDate(value.getUTCSeconds()) + 'Z';
} else {
value = null;
}
}
type = this.type(value);
if (type === "number") {
strRet = isFinite(value) ? value : String(null);
} else if (type === "boolean") {
strRet = String(value);
} else if (type === "string") {
strRet = quote(value);
} else if (type === "undefined" || type === "null") {
strRet = 'null';
} else if (type === "array") {
for (var n = 0; n < value.length; n++) {
arr.push(this.serialize(value[n]));
}
strRet = "[" + arr.join(",") + "]";
} else {
for (var i in value) {
if (Object.prototype.hasOwnProperty.call(value, i)) {
if (this.type(value[i]) !== "undefined") {
arr.push(quote(i) + ":" + this.serialize(value[i]));
}
}
}
strRet = "{" + arr.join(",") + "}";
}
return strRet;
}
})()
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment