json與object的區別:1、JSON是對象,但對象不一定是JSON2、對象的組成是由屬性和屬性值,也就是KEY->VALUE對組成,value可是是任意的數據類型,當value為一個函數的時候,這個時候叫做方法。而你通過 JSON.parse()傳入的字元串並裡面有VALUE為function ...
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-\u001F\u2028\u2029]/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 |