解决IE8以下低版本实现JSON.parse()与JSON.stringify()的兼容
将字符串和json对象的相互转换,我们通常使用JSON.parse()与JSON.stringify()。但是在IE8以下版本中,在window是没有JSON对象的。那么如何解决IE8以下低版本实现JSON.parse()与JSON.stringify()的兼容呢?下面整理一些实现方式:
1、利用eval方式解析
function strToJson(str){
var json = eval('(' + str + ')');
return json;
}2、new Function形式
function strToJson(str){
var json = (new Function("return " + str))();
return json;
}3、自定义兼容json的方法(推荐)
if (!window.JSON) {
window.JSON = {
parse: function(jsonStr) {
return eval('(' + jsonStr + ')');
},
stringify: function(jsonObj) {
var result = '',
curVal;
if (jsonObj === null) {
return String(jsonObj);
}
switch (typeof jsonObj) {
case 'number':
case 'boolean':
return String(jsonObj);
case 'string':
return '"' + jsonObj + '"';
case 'undefined':
case 'function':
return undefined;
}
switch (Object.prototype.toString.call(jsonObj)) {
case '[object Array]':
result += '[';
for (var i = 0, len = jsonObj.length; i < len; i++) {
curVal = JSON.stringify(jsonObj[i]);
result += (curVal === undefined ? null : curVal) + ",";
}
if (result !== '[') {
result = result.slice(0, -1);
}
result += ']';
return result;
case '[object Date]':
return '"' + (jsonObj.toJSON ? jsonObj.toJSON() : jsonObj.toString()) + '"';
case '[object RegExp]':
return "{}";
case '[object Object]':
result += '{';
for (i in jsonObj) {
if (jsonObj.hasOwnProperty(i)) {
curVal = JSON.stringify(jsonObj[i]);
if (curVal !== undefined) {
result += '"' + i + '":' +curVal + ',';
}
}
}
if (result !== '{') {
result = result.slice(0, -1);
}
result += '}';
return result;
case '[object String]':
return '"' + jsonObj.toString() + '"';
case '[object Number]':
case '[object Boolean]':
return jsonObj.toString();
}
}
};
}4、head头添加mate
<meta http-equiv="X-UA-Compatible" content="IE=8" />说明:X-UA-Compatible是针对ie8新加的一个设置,对于ie8之外的浏览器是不识别的。作用是将浏览器的兼容模式关闭,用户不可选择ie的显示模式为兼容模式
本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!