function is_number(obj){ return Object.prototype.toString.call(obj)==='[object Number]'; } function is_boolean(obj){ return Object.prototype.toString.call(obj)==='[object Boolean]'; } function is_string(obj){ return Object.prototype.toString.call(obj)==='[object String]'; } function is_null(obj){ return Object.prototype.toString.call(obj)==='[object Null]'; } function is_undefined(obj){ return Object.prototype.toString.call(obj)==='[object Undefined]'; } function is_object(obj){ return Object.prototype.toString.call(obj)==='[object Object]'; } function is_array(obj){ return Object.prototype.toString.call(obj)==='[object Array]'; } function is_function(obj){ return Object.prototype.toString.call(obj)==='[object Function]'; } function quote(str){ return '"' + str + '"'; } var basic_map = { '[object Undefined]': true, '[object Number]': true, '[object Null]': true, '[object Boolean]': true } function basic_type(obj){ return basic_map[ Object.prototype.toString.call(obj) ]; } JSON = window.JSON || {}; //JSON.stringify JSON.toStr = function(obj){ if(is_string(obj) || is_null(obj) || is_number(obj) || is_boolean(obj)) return quote(obj); if(is_undefined(obj)) return obj; if(is_array(obj)){ var left = "[", middle = [], right = "]", value; var callee = arguments.callee; for(var i=0,len=obj.length; i