JSON 对象属性和方法
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 对象属性和方法
内置对象
宿主对象