如何實現一個JSON.stringify() ,手寫JSON.stringify

JSON.stringify() 方法將一個 JavaScript 值(對象或者數組)轉換爲一個 JSON 字符串,如果指定了 replacer 是一個函數,則可以選擇性地替換值,或者如果指定了 replacer 是一個數組,則可選擇性地僅包含數組指定的屬性。

語法

JSON.stringify(value[,replacer[,space]])

參數

1.value

將要序列化成 一個 JSON 字符串的值。

2.replacer 可選

如果該參數是一個函數,則在序列化過程中,被序列化的值的每個屬性都會經過該函數的轉換和處理;如果該參數是一個數組,則只有包含在這個數組中的屬性名纔會被序列化到最終的 JSON 字符串中;如果該參數爲 null 或者未提供,則對象所有的屬性都會被序列化;關於該參數更詳細的解釋和示例,請參考使用原生的 JSON 對象一文。

3.space 可選

指定縮進用的空白字符串,用於美化輸出(pretty-print);如果參數是個數字,它代表有多少的空格;上限爲10。該值若小於1,則意味着沒有空格;如果該參數爲字符串(當字符串長度超過10個字母,取其前10個字母),該字符串將被作爲空格;如果該參數沒有提供(或者爲 null),將沒有空格。

返回值

一個表示給定值的JSON字符串。

function jsonStringify (obj) {
  let type = typeof obj;
  if (type !== "object" || type === null) {
    if (/string|undefined|function/.test(type)) {
      obj = '"' + obj + '"';
    }
    return String(obj);
  } else {
    let json = []
    arr = (obj && obj.constructor === Array);
    for (let k in obj) {
      let v = obj[k];
      let type = typeof v;
      if (/string|undefined|function/.test(type)) {
        v = '"' + v + '"';
      } else if (type === "object") {
        v = jsonStringify(v);
      }
      json.push((arr ? "" : '"' + k + '":') + String(v));
    }
    return (arr ? "[" : "{") + String(json) + (arr ? "]" : "}")
  }
}
jsonStringify({ x: 5 })
// "{"x":5}"
jsonStringify([1, "false", false])
// "[1,"false",false]"
jsonStringify({ b: undefined })
// "{"b":"undefined"}"

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章