之前做我的项目,因为组员来回的用了JSON.stringify,被看见的后果搞蒙了,明天写这个文章,来记录下。
比方一个数组
var a = [{'name': 'zj', 'age': 32}]var a1 = JSON.stringify(a)console.log(a1)// "[{"name":"zj","age":32}]"// 看打印后果,第一次stringify,只是在数组两边用""包裹起了。// 但如果把"[{"name":"zj","age":32}]" 赋值给某一个值,会报错,这里有的不了解// Uncaught SyntaxError: Unexpected identifiervar a2 = JSON.stringify(a1)// 第二次stringify,开始在键值对的非number类型上写上\...\console.log(a2)// ""[{\"name\":\"zj\",\"age\":32}]""如果要回到a初始化的状态,执行了几次stringify就执行几次JSON.parse原路返回
再来看encodeURIComponent
失常状况下,如果url上有query参数,浏览器可能会被默认encodeURIComponent
听闻小程序的onload这样的钩子函数,会默认把url的参数decodeURIComponent(需考据),这里能够间接拿到onload钩子函数外面的query里的键值对Map对象。
var a = [{'name': 'zj', 'age': 32}]var a1 = JSON.stringify(a)var a2 = encodeURIComponent(a1)console.log(a2)// %5B%7B%22name%22%3A%22zj%22%2C%22age%22%3A32%7D%5D// 同理,如果再一次encodeURIComponent(a2)// %255B%257B%2522name%2522%253A%2522zj%2522%252C%2522age%2522%253A32%257D%255D再一次%25255B%25257B%252522name%252522%25253A%252522zj%252522%25252C%252522age%252522%25253A32%25257D%25255D// 如果要回到a1状态,执行了几次encodeURIComponent,就再执行几次decodeURIComponent,原路返回即可// 我疯了吗,如果要执行这么屡次,因为我的项目就遇见,我执行了一次encodeURIComponent,但后端接管参数,也给执行了一次encodeURIComponent但小程序的onload钩子函数只会执行一次decodeURIComponent,所以这了还须要本人执行一次decodeURIComponent。
同理看见的stringify后的后果如果呈现了\,想要回到失常的数组,至多还要执行一次JSON.parse(如果还有\,再执行一次JSON.parse 以此类推)