json与object的区别:
1、JSON是对象,但对象不一定是JSON
2、对象的组成是由属性和属性值,也就是KEY->VALUE对组成,value可是是任意的数据类型,当value为一个函数的时候,这个时候叫做方法。而你通过
JSON.parse()传入的字符串并里面有VALUE为function的吗?不可能像下面的例子一样写这个被转换的字符串:
1 var a ={name:"",say:function(){}}; 2 JSON.parse(a);
以上代码,是没有办法执行的。即使是服务器转换的JSON字符串,也没有把方法转换进这个字符串的。
3、在JSON对象中出现的value始终都不可能是一个函数,如果转换后添加进去方法,那就变成一个真正的JS对象了。
4、JSON是一种数据结构,并不是对象。(所以没有方法)
(JSON和对象的区别就在于有没有方法,在JS中某种意义上讲JSON.parse()转换的就是一个对象。)
整理转自:https://ask.csdn.net/questions/661237
json方法:
JSON.parse()
解析JSON字符串并返回对应的值,可以额外传入一个转换函数,用来将生成的值和其属性,在返回之前进行某些修改
JSON.stringify()返回与指定对应的JSON字符串,可以通过额外的参数,控制仅包含某些属性,或者以自定义方法来替换某些key对应的属性值。
JSON.parse()
- 解析JSON字符串并返回对应的值,可以额外传入一个转换函数,用来将生成的值和其属性, 在返回之前进行某些修改。
JSON.stringify()
- 返回与指定值对应的JSON字符串,可以通过额外的参数, 控制仅包含某些属性, 或者以自定义方法来替换某些key对应的属性值。
Polyfill
JSON
对象可能不被老版本的浏览器支持。可以将下面的代码放到JS脚本最开始的位置,这样就可以在没有原生支持 JSON 对象的浏览器(如IE6)中使用 JSON
对象。
以下算法是对原生JSON
对象的模仿:
if (!window.JSON) {
window.JSON = {
parse: function(sJSON) { return eval('(' + sJSON + ')'); },
stringify: (function () {
var toString = Object.prototype.toString;
var isArray = Array.isArray || function (a) { return toString.call(a) === '[object Array]'; };
var escMap = {'"': '\"', '\': '\\', 'b': '\b', 'f': '\f', 'n': '\n', 'r': '\r', 't': '\t'};
var escFunc = function (m) { return escMap[m] || '\u' + (m.charCodeAt(0) + 0x10000).toString(16).substr(1); };
var escRE = /[\"u0000-u001Fu2028u2029]/g;
return function stringify(value) {
if (value == null) {
return 'null';
} else if (typeof value === 'number') {
return isFinite(value) ? value.toString() : 'null';
} else if (typeof value === 'boolean') {
return value.toString();
} else if (typeof value === 'object') {
if (typeof value.toJSON === 'function') {
return stringify(value.toJSON());
} else if (isArray(value)) {
var res = '[';
for (var i = 0; i < value.length; i++)
res += (i ? ', ' : '') + stringify(value[i]);
return res + ']';
} else if (toString.call(value) === '[object Object]') {
var tmp = [];
for (var k in value) {
if (value.hasOwnProperty(k))
tmp.push(stringify(k) + ': ' + stringify(value[k]));
}
return '{' + tmp.join(', ') + '}';
}
}
return '"' + value.toString().replace(escRE, escFunc) + '"';
};
})()
};
}
业界更专业, 更强大的JSON
对象 polyfills 是 JSON2 和 JSON3。
规范
规范 | 状态 | 说明 |
---|---|---|
ECMAScript 5.1 (ECMA-262) JSON |
Standard | Initial definition. |
ECMAScript 2015 (6th Edition, ECMA-262) JSON |
Standard | |
ECMAScript Latest Draft (ECMA-262) JSON |
Draft |
浏览器兼容性
Update compatibility data on GitHub
Yes | Yes | 3.5 | 8 | 10.5 | 4 | Yes | Yes | Yes | 4 | Yes | Yes | Yes | Yes |
Yes | Yes | 3.5 | 8 | 10.5 | 4 | Yes | Yes | Yes | 4 | Yes | Yes | Yes | Yes |
Yes | Yes | 3.5 | 8 | 10.5 | 4 | Yes | Yes | Yes | 4 | Yes | Yes | Yes | Yes |
66 | No | 62 | No | 53 | Yes | 66 | 66 | No | 62 | 53 | Yes | No | 10.0.0 |
Legend
- Full support
- No support
相关链接
相关主题
- 继承
内容来源于网络如有侵权请私信删除
- 还没有人评论,欢迎说说您的想法!