2019年9月24日

JavaScript-结构型数据(转)

作者 admin

结构型数据

有很多种,比如表单,但是一定要尽量使用JSON,就是好用,谁用谁知道。谁让你不用JSON,你们确实需要好好谈谈了。

JSON

非常简单的理解方式,当做Object处理即可,数据结构与Object一模一样(转换时候Function值会丢失,下面会介绍如何处理),即key-value形式, 但是有个特殊,就是数组也当做合法的JSON结构。

// JSON
{
    key1: value1,
    key2: value2,
    ...
    keyn: valuen
}

// 数组也行
[value1, value2, value3]

以上value当然可以是任何类型,除了Function,因为最终都是转成了String类型进行传输的。

那么如果你遇到了需要传输Function的业务,如下处理:

var json = {
    a: 1,
    b: function() {
        return 'function'
    }
}

// 会出现的问题
// JSON.stringify(json) // "{"a":1}",函数那个丢失了,注意已经转成字符串了

// 处理方式
json.b += '' // 记得之前数据类型时候字符串加减法么,加空字符串相当于强制转为字符串

JSON.stringify(json) // "{"a":1,"b":"function() {\n        return 'function'\n    }"}",成功转换

JSON两个关键方法

方法 说明
stringify 对象(或数组)转字符串
parse 字符串转对象(或数组)
JSON.stringify([1]) // "[1]"
JSON.parse("[2]") // [2]

特殊结构

Function

严格来说,Function不是数据结构,但是它可以实现数据结构功能,或者存储数据。这里超纲,牵扯到了“类”,简单了解即可。

function MyObj() {
    this.head = 'head'
    this.foot = 'foot'
    this.obj = {a: 1}
    this.arr = [1,2]
    this.func = function() {
        return 'func'
    }
}

var obj = new myObj()

obj.func += ''

obj // "{"head":"head","foot":"foot","obj":{"a":1},"arr":[1,2],"func":"function() {\n        return 'func'\n    }"}"

typeof obj // "object"

作者:前端绅士
链接:https://www.imooc.com/article/49594