JSON部分
-
stringify:在英文中并没有对应的翻译,可以理解为字符串化的意思,但与string有明显的区别
-
parse:(对句子)作语法分析
localstorage是以key:value对的形式来存储数据,而且value值必须是string类型(localStorage中的数据会默认执行String()这个方法),正是因为这个键值必须是字符串,所以带来了一些问题
当我们使用存储在localStorage的数据会被'字符串化',怎么解决数据变形的问题?
JSON 是一种存储和交换数据的语法,JSON.stringify()和JSON.parse()解决了数据变形的问题
{"name":"tom","sex":"男","age":"24"} //json对象,普通对象的键名不用加引号
'{"name":"2323","sex":"afasdf","age":"6262"}' //json字符串
let obj1 = { a: "1" };//普通对象
let obj2 = { "a": "1" };//json对象
JSON.stringify(obj1) 与 JSON.stringify(obj2)的结果一样 => '{"a":"1"}'
// 在浏览器中localStorage中你看到的是黑色的{"a":"1"},这个是字符串
- JSON.stringify():是把json对象(或者普通对象)转成json字符串,这里的对象我把它理解为所有的数据类型
- JSON.parse():是把json字符串转成json对象
特别地:
String([1,2,3,4]) // '1,2,3,4'
String({a:1}) //' [object Object]'
而
JSON.stringify([1,2,3,4]) // '[1,2,3,4]'
JSON.stringify({a:1}) // '{"a":"1"}',变成了一个json类型的字符串(a=>'a',1=>'1')
- 上面的Stingify完整了保留了原有的数据结构,只是多了层''引号,如果加了Stinrgify不加parse,它会以'[1,2,3,4]'和'{"a":"1"}'加了引号后输出,怎么原样输出最开始的结构:使JSON.parse()即可!
Tips:其他类型的都是包裹了个""使成为了一个字符串,比如一个数字1=>"1"。但这上面两个容易搞混,切记!统一用stingify
qs库部分(处理url参数的js库)
qs.parse() :只针对&符号做转化
let str = 'a=1&b=lwx&c=true'
let data = qs.parse(str); // {a: '1', b: 'lwx', c: 'true'}
console.log(data);
qs.stringify() :只针对&符号做转化
let obj = {a: '1', b: 'lwx', c: 'true'}
let data2 = qs.stringify(obj)
console.log(data2); // 'a=1&b=lwx&c=true'