1. function myStringfy(data) {
    2. // 字符串 >>> 自己
    3. // 数字 >>> 自己
    4. // undefined >>> 自己 (外面不加引号)
    5. // null >>> 自己
    6. // function >>> undefined (外面不加引号)
    7. // 数组 >>> 用逗号分隔 如果某项为undefined 该项处记录为null
    8. // 对象 >>> key 用双引号包起来, 各属性逗号分隔 筛选掉undefined
    9. const myStringfyFunc = data => {
    10. if (
    11. data === null ||
    12. data === undefined ||
    13. typeof data === 'string' ||
    14. typeof data === 'number'
    15. ) {
    16. return data
    17. } else if (typeof data === 'function') {
    18. return undefined
    19. } else if (typeof data === 'object') {
    20. if (Array.isArray(data)) {
    21. // 数组
    22. return `[${data
    23. .map(item => {
    24. if (myStringfyFunc(item) === undefined || item === null)
    25. return 'null'
    26. else return myStringfyFunc(item)
    27. })
    28. .join(',')}]`
    29. } else {
    30. // 对象
    31. let arr = []
    32. for (let key in data) {
    33. if (myStringfyFunc(data[key]) !== undefined) {
    34. arr.push(`"${key}":${myStringfyFunc(data[key])}`)
    35. }
    36. }
    37. return `{${arr.join(',')}}`
    38. }
    39. } else {
    40. return new Exception('UNKNOWN TYPE!')
    41. }
    42. }
    43. if (data === undefined || typeof data === 'function') {
    44. return myStringfyFunc(data)
    45. } else if (typeof data === 'string') {
    46. return `"${myStringfyFunc(data)}"`
    47. } else {
    48. return `${myStringfyFunc(data)}`
    49. }
    50. }