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 中的三大對象 (本地對象、內置對象、 宿主對象)

本地對象

 

內置對象

 

宿主對象

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM