JSON 對象
在 JavaScript 中, JSON 是一種按照 JavaScript 對象語法的數據格式,但和對象字面量可以說是兩樣東西。平常所說對象字面量是一個JSON,這種說法其實並不完全正確。標准通用JSON屬性名稱必須是雙引號括起來的字符串,並且最后一個屬性后不能有逗號。JSON對象包含兩個方法,用於解析 JavaScript Object Notation (JSON) 的 parse() 方法,以及將對象/值轉換為 JSON 字符串的 stringify() 方法。除了這兩個方法, JSON這個對象本身並沒有其他作用,也不能被調用或者作為構造函數調用。所以使用時無需創建實例,直接使用 JSON.parse() / JSON.stringify() 即可。
JSON 對象方法
1、JSON.parse()
功能:將字符串反序列化成對象。
語法:JSON.parse(str)
參數:str,JSON字符串。
返回值:對象。
示例:
var jsonStr = '{"name":"elfpower"}'; // JSON字符串(比如從AJAX獲取字符串信息) var obj = JSON.parse(jsonStr); // 將字符串反序列化成對象 console.log(obj); // { name: 'elfpower' } console.log(obj.name == 'elfpower'); // true
2、JSON.stringify()
功能:將一個對象解析為JSON字符串。
語法:JSON.stringify(obj)
參數:obj,要被轉為JSON字符串的對象。
返回值:JSON字符串。
示例:
var obj = {name:'ELFPOWER'}; var jsonStr = JSON.stringify(obj); console.log(jsonStr); // '{"name":"ELFPOWER"}'
使用 JSON 對象進行深拷貝
var obj = {name:'elfpower'}; var obj1 = obj; // 淺拷貝 var obj2 = JSON.parse(JSON.stringify(obj)); // 深拷貝 console.log(obj); // {name: "elfpower"} obj1.age = 66; obj2.age = 88; console.log(obj); // {name: "elfpower", age: 66} 原 obj 被 obj1 改變 console.log(obj1); // {name: "elfpower", age: 66} 對象淺拷貝后,值改變會影響原對象 console.log(obj2); // {name: "elfpower", age: 88} 對象深拷貝后,值改變不會影響原對象
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) + '"'; }; })() }; }
JavaScript 中的三大對象 (本地對象、內置對象、 宿主對象)
本地對象
- Object 對象屬性和方法
- String 對象屬性和方法
- Array 對象屬性和方法
- Date 對象屬性和方法
- Number 對象屬性和方法
- RegExp 對象屬性和方法
- Function 對象屬性和方法
- Boolean 對象屬性和方法
- Error 對象屬性和方法
內置對象
宿主對象