以前作项目,由于组员来回的用了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 identifier var 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 以此类推)浏览器