关于javascript:JSONstringify-和decodeURIComponent

45次阅读

共计 1271 个字符,预计需要花费 4 分钟才能阅读完成。

之前做我的项目,因为组员来回的用了 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 以此类推)

正文完
 0