一、序列化

  1.1 序列化

  将其他对象转换为字符串,用法:JSON.stringify()  

var li = [1,2,3,4];
var new_li = JSON.stringify(li);
new_li;
"[1,2,3,4]"

  1.2 反序列化

  将字符串转换为对象类型,用法:JSON.parse() 

var s = '{"k1":"v1","k2":"v2"}';
var new_key = JSON.parse(s);
new_key;
{k1: "v1", k2: "v2"}

  

二、字符编码

  js对文字进行编码涉及3个函数:escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decodeURIComponent。

  2.1 encodeURI()

  encodeURI() 函数可把字符串作为 URI 进行编码

  该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。

  该方法的目的是对 URI 进行完整的编码,因此对以下在 URI 中具有特殊含义的 ASCII 标点符号,encodeURI() 函数是不会进行转义的:;/?:@&=+$,#

var s = "http://www.sogou.com/web?query=足球";
undefined
s
"http://www.sogou.com/web?query=足球"
new_s = encodeURI(s);
"http://www.sogou.com/web?query=%E8%B6%B3%E7%90%83"

  2.2 decodeURI()

  对URI中编码的字符串解码 

var s = 'http://www.sogou.com/web?query=%E8%B6%B3%E7%90%83'
undefined
s
"http://www.sogou.com/web?query=%E8%B6%B3%E7%90%83"
var new_uri = decodeURI(s)
undefined
new_uri
"http://www.sogou.com/web?query=足球"

  2.3 encodeURIComponent()

  函数可把字符串作为 URI 组件进行编码。

  该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。其他字符(比如 :;/?:@&=+$,# 这些用于分隔 URI 组件的标点符号),都是由一个或多个十六进制的转义序列替换的。  

  注:encodeURIComponent() 函数 与 encodeURI() 函数的区别之处,前者假定它的参数是 URI 的一部分(比如协议、主机名、路径或查询字符串)。因此 encodeURIComponent() 函数将转义用于分隔 URI 各个部分的标点符号。

var s = "http://www.sogou.com/web?query=足球"
undefined
s
"http://www.sogou.com/web?query=足球"
var new_s = encodeURIComponent(s)
undefined
new_s
"http%3A%2F%2Fwww.sogou.com%2Fweb%3Fquery%3D%E8%B6%B3%E7%90%83"

  2.4 decodeURIComponent()

  对编码的URI组件进行解码 

encode_uri = "http%3A%2F%2Fwww.sogou.com%2Fweb%3Fquery%3D%E8%B6%B3%E7%90%83"
"http%3A%2F%2Fwww.sogou.com%2Fweb%3Fquery%3D%E8%B6%B3%E7%90%83"
new_uri = decodeURIComponent(encode_uri)
"http://www.sogou.com/web?query=足球"

  2.5 escape()

  escape() 函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串

  该方法不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。其他所有的字符都会被转义序列替换。 

url = "http://www.sogou.com/web?query=足球"
"http://www.sogou.com/web?query=足球"
new_url = escape(url)
"http%3A//www.sogou.com/web%3Fquery%3D%u8DB3%u7403"

  2.5 unescape()

  对escape()编码进行解码  

new_url
"http%3A//www.sogou.com/web%3Fquery%3D%u8DB3%u7403"
last_url = unescape(new_url)
"http://www.sogou.com/web?query=足球"

  

三、总结

  escape()除了 ASCII 字母、数字和特定的符号外,对传进来的字符串全部进行转义编码,因此如果想对URL编码,最好不要使用此方法。而encodeURI() 用于编码整个URI,因为URI中的合法字符都不会被编码转换。encodeURIComponent方法在编码单个URIComponent(指请求参数)应当是最常用的,它可以讲参数中的中文、特殊字符进行转义,而不会影响整个URL。

  escape对0-255以外的unicode值进行编码时输出%u****格式,其它情况下escape,encodeURI,encodeURIComponent编码结果相同。

最多使用的应为encodeURIComponent,它是将中文、韩文等特殊字符转换成utf-8格式的url编码,所以如果给后台传递参数需要使用encodeURIComponent时需要后台解码对utf-8支持(form中的编码方式和当前页面编码方式相同)
  escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z
  encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z

  encodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z

最新文章

  1. tLinux 2.2下安装Mono 4.8
  2. Spring—Quartz定时调度CronTrigger时间配置格式的实例
  3. iOS 修改backBarButtonItem 中的titile 字段
  4. CDN 技术详解(DNS,GSLB,Cache)
  5. 在安卓下打包cocos2d-js 3.6项目with ProtoBuf.js
  6. Servlet生命周期及工作原理
  7. 深入学习golang(3)—类型方法
  8. Nginx负载均衡 后端服务器怎么共享Session 问题
  9. Eclipse中新建jsp文件访问页面时乱码问题
  10. HDU 1104 Remainder
  11. ABAP EXCEL 文件上传下载 用SMW0
  12. leetcode第八题 String to Integer (atoi) (java)
  13. php实现无限级树型菜单(函数递归算法)
  14. sql发邮件
  15. php+ajax+json
  16. Linux 内核协议栈之TCP连接关闭
  17. Excel 2010高级应用-雷达图(六)
  18. 一.rest-framework之版本控制 二、Django缓存 三、跨域问题 四、drf分页器 五、响应器 六、url控制器
  19. flask设置cookie,设置session,模拟用户认证、模拟管理后台admin、模拟用户logout
  20. Codeforces485D(SummerTrainingDay01-K)

热门文章

  1. 汇编 do while循环
  2. 【HNOI2016】序列
  3. [BZOJ4842]Delight for a Cat[费用流]
  4. 在Windows上安装配置Git
  5. 《杜增强讲Unity之Tanks坦克大战》10-相机控制
  6. 百度Hr分享,一个合格的数据工程师简历中必备技能?
  7. [paper]MaskFusion: Real-Time Recognition, Tracking and Reconstruction of Multiple Moving Objects
  8. mysql学习(4)python操作数据库
  9. 将搬家至CSDN
  10. Visual Studio(VS)C++单元测试