在JS中, 要将JSON对象,数组或其他类型数据转化为字符串, 可以使用JSON.stringify,但由于此方法只支持部分浏览器, 搜搜其他的类库代码又太多,不如花点时间自己写个。
- Object.prototype.toString1 = function(){
- switch(typeof this.valueOf()){
- case "string":
- return '"'+this.valueOf().replace(/\"/g,'\\"')+'"';
- case "object":
- if(this.valueOf() instanceof Array){
- var returns = [];
- for(var i = 0,n=this.valueOf().length;i<n;i++){
- returns.push(this.valueOf()[i].toString1())
- }
- return "["+returns.join()+"]";
- }else{
- var returns = [];
- for(var i in this.valueOf()){
- if(this.valueOf().hasOwnProperty(i)){
- returns.push( i+":"+this.valueOf()[i].toString1() )
- }
- }
- return "{"+returns.join(";")+"}";
- }
- default:
- return this;
- }
- };
- var a = {"a":"aa","b":[1,2,{"c":"c"}],"d":function(){alert(b)}};
- console.log( a.toString1() );
此方法采用原型链的方式,会影响所有的对象,可以再将此方法改造一下,改成函数的调用方式。
- function stringify(obj){
- switch(typeof obj){
- case "string":
- return '"'+obj.replace(/\"/g,'\\"')+'"';
- case "object":
- if(obj instanceof Array){
- var returns = [];
- for(var i = 0,n=obj.length;i<n;i++){
- returns.push(arguments.callee(obj[i]));
- }
- return "["+returns.join()+"]";
- }else{
- var returns = [];
- for(var i in obj){
- if(obj.hasOwnProperty(i)){
- returns.push( i+":"+arguments.callee(obj[i]));
- }
- }
- return "{"+returns.join(";")+"}";
- }
- default:
- return obj;
- }
- }
- var a = {"a":"aa","b":[1,2,{"c":"c"}],"d":function(){alert(b)}};
- console.log( stringify(a) );