既然是重学,首先得跳过最基础的html/css/js/ts与各种框架的使用,而是强化基础的规范和标准
JSON是受Javascript字面量对象启发的数据结果,是它的一个子集,同时也是与其它多种语言的交集,比xml更轻量,而且使用越来越多的数据传输格式。
一、基础组成:
1. 六种结构标记:
[ // U+005B 左方括号 { // U+007B 左花括号 ] // U+005D 右方括号 } // U+007D 右花括号 : // U+003A 冒号 , // U+002C 逗号 // 都是半角符号
2. 7种值:
object // {key:value,key2:value2} array // [value1,value2] number // (-)(1-9)(0-9)+(.)(0-9)(e|E)(-|+)(0-9) string // "" true false nullJSON的是可嵌套的key=>value对,所谓可嵌套指的是value也可以是key=>value的JSON对象
二、注意事项:
** JSON的键值key只能是字符串
** JSON不能有多余的,(逗号)
** JSON的key-value-标记之间允许空格
** null还代表值可能是无效的JSON值,例如NaN-Infinite等序列化会被转化成null
** 会忽略函数,循环引用会造成circular异常抛出
** 字符串的转义
\" // === \u+0022 \\ // === \u+005C \/ // === \u+002F \b // \u+0008 \f // \u+000C \n // \u+000A \r // \u+000D \t // \u+0009
三、Javascript使用技巧
1. 复杂对象可以自定义toJSON方法来自定义序列化后的值
2. 需要循环引用的场景,通常是类树结构,可以将parent赋值为节点的id,这样就不是引用了。
3. 默认的toJSON方法性能一般,如果在对象数据结构明确时,可以重写之
4. JSON.parse可能会抛出异常,可以自己写一个函数来处理默认值的场景
export const parseJSON = (str,def) => { try{ return JSON.parse(str) }catch{ return def } }