huabingtao / front-knowledge

基于Issues系统学习前端技术
0 stars 0 forks source link

实现 JSON.parse #74

Open huabingtao opened 4 years ago

huabingtao commented 4 years ago

实现 JSON.parse

简单版

var a = {
  name: 'Lucy',
  age: [1, 2, 3],
};
function jsonStringify(obj) {
  let type = typeof obj;
  if (type !== 'object') {
    if (/string|undefined|function/.test(type)) {
      obj = `"${String(obj)}"`;
    }
    return String(obj);
  } else {
    // 如果是 object 类型
    let res = [];
    let isArray = Array.isArray(obj);
    Object.keys(obj).forEach((key) => {
      let type = typeof obj[key];
      let value = obj[key];
      if (/string|undefined|function/.test(type)) {
        value = `"${String(value)}"`;
      } else {
        value = jsonStringify(value);
      }
      res.push(isArray ? `${String(value)}` : `"${key}":${String(value)}`);
    });
    return isArray ? `[${res.join()}]` : `{${String(res)}}`;
  }
}
var v = jsonStringify(a);
eval(`(${v})`)