JS实现JSON.stringify的实例代码讲解
JSON.stringify是浏览器高版本带的一个将JS的Objtect对象转换为JSON字符串的一个方法,不过再IE6下面,并不存在JSON这一对象,因此,用到此方法时,需要写一套兼容性的代码。JSON.stringify的一些规则以及注意点:当对象为数字,null,boolean的时候,直接转换为相应的字符串就可以了。 但是string,function,undefined,object,array等,需要特殊处理。
1.undefined,该类型使用JSON.stringify处理的时候,如果对象就是undefined,将会输出"undefined",如果对象是数组的元素,那么将会变成null,比如:[undefined],stringify之后变成了"[null]";如果该对象是object的元素,那么该属性将当作不存在,不输出,比如{a:1,b:undefined},stringify之后是"{\"a\":1},B属性直接抛弃。
2.字符串在拼接的时候需要把内部的双引号处理掉
代码如下
/**
*JSONstringify的实现
*@authornorkts<norkts@gmail.com>
*@version1.02015-11-2415:11实现了基本功能
*@version1.12015-11-2415:19norkts增加了JSON.stringify的兼用代码实现
*@version1.22015-11-2415:49norkts修改数组indexOf在IE下不兼容的写法,修改了undefined值的特殊处理
*/
(function(NS){
//简单类型
varsimpleTypes=["number","boolean","undefined","string","function"];
//JSON.stringify的主函数
functionstringify(object){
vartype=typeofobject;
//如果是简单类型,则直接返回简单类型的结果
if(indexOf(simpleTypes,type)>-1){
returnparseSimpleObject(object);
}
//数组对象的
if(objectinstanceofArray){
varlen=object.length;
varresArr=[];
for(vari=0;i<len;i++){
varitemType=typeofobject[i];
if(indexOf(simpleTypes,itemType)>-1){
//undefined特殊处理,数组中变成null
if(itemType!="undefined"){
resArr.push(parseSimpleObject(object[i]));
}else{
resArr.push("null");
}
}else{
//递归处理JS数组中的复杂元素
resArr.push(stringify(object[i]));
}
}
return"["+resArr.join(",")+"]";
}
//普通object对象
if(objectinstanceofObject){
if(object==null){
return"null";
}
varresArr=[];
for(varnameinobject){
varitemType=typeofobject[name];
if(indexOf(simpleTypes,itemType)>-1){
//undefined特殊处理,object中不编码
if(itemType!="undefined"){
resArr.push("\""+name+"\":"+parseSimpleObject(object[name]));
}
}else{
resArr.push("\""+name+"\":"+stringify(object[name]));
}
}
return"{"+resArr.join(",")+"}";
}
}
functionparseSimpleObject(object){
vartype=typeofobject;
if(type=="string"||type=="function"){
return"\""+object.toString().replace("\"","\\\"")+"\"";
}
if(type=="number"||type=="boolean"){
returnobject.toString();
}
if(type=="undefined"){
return"undefined";
}
return"\""+object.toString().replace("\"","\\\"")+"\"";
}
functionindexOf(arr,val){
for(vari=0;i<arr.length;i++){
if(arr[i]===val){
returni;
}
}
return-1;
}
/**
*将stringify做二次封装
*@paramobject要处理的对象
*
*/
NS.stringify=function(object,isEncodeZh){
varres=stringify(object);
if(isEncodeZh){
varencodeRes="";
for(vari=0;i<res.length;i++){
if(res.charCodeAt(i)<0xff){
encodeRes+=res[i];
}else{
encodeRes+="\\u"+res.charCodeAt(i).toString(16);
}
}
res=encodeRes;
}
returnres;
};
})(window);
以上所述是小编给大家介绍的JS实现JSON.stringify的实例代码讲解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!