一、序列化

  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

JavaScript--序列化以及转义的更多相关文章

  1. JavaScript 序列化、转义

    JavaScript  序列化.转义 序列化 // 将对象转换为字符串 JSON.stringify() // 将字符串转换为对象类型 JSON.parse() 转义 // URl中未转义的字符 de ...

  2. C# 序列化与反序列化Serialization之Json Xml Binary Soap JavaScript序列化

    所谓的序列化其实就是把一个内存中的对象信息转化成一个可以持久化保存的形式,方便保存数据库和文件或着用于传输, 序列化的主要作用是不同平台之间进行通信与信息的传递保存等,常用的有序列化有Json Xml ...

  3. javascript序列化和反序列化

    一. JavaScript中的对象序列化(Serialize)和反序列化(Deserialize),简单实例: var obj = {id: 1, name: 'yoyo', age: undefin ...

  4. 用Javascript进行HTML转义(分享)

      众所周知页面上的字符内容通常都需要进行HTML转义才能正确显示,尤其对于Input,Textarea提交的内容,更是要进行转义以防止javascript注入攻击.   通常的HTML转义主要是针对 ...

  5. javascript之url转义escape()、encodeURI()和decodeURI()

    我们可以知道:escape()除了 ASCII 字母.数字和特定的符号外,对传进来的字符串全部进行转义编码,因此如果想对URL编码,最好不要使用此方法.而encodeURI() 用于编码整个URI,因 ...

  6. javascript之url转义escape()、encodeURI()和decodeURI(),ifram父子传参参数有中文时出现乱码

    ifram父子传参参数有中文时出现乱码,可先在父级页面用encodeURI转义,在到子页面用进行decodeURI()解码 我们可以知道:escape()除了 ASCII 字母.数字和特定的符号外,对 ...

  7. JavaScript day3(转义符)

    转义符(escape character) 当你定义一个字符串必须要用单引号或双引号来包裹它.那么当你需要在字符串中使用一个: "  或者 ' 时该怎么办呢? 在 JavaScript 中可 ...

  8. 使用JavaScript序列化任意复杂的对象

    在phonegap的开发中,有时需要知道对象的所有属性,就简单的写了个序列化的方法. 序列化方法如下: function serialize(obj, name) { var result = &qu ...

  9. javascript之url转义escape()、encodeURI()和encodeURIComponent()

    JavaScript中有三个可以对字符串编码的函数,分别是: escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decod ...

  10. javascript进行url转义方法比较escape、encodeURI和encodeURIComponent

    escape会将除了 ASCII 字母.数字和特定的符号(* @ - _ + . /)以外的字符全部进行转义编码,因此如果想对URL编码,最好不要使用此方法,因为它会让你的URL变的不可读. 提示:E ...

随机推荐

  1. 洛咕 P2336 [SCOI2012]喵星球上的点名

    洛咕 P2336 [SCOI2012]喵星球上的点名 先求出SA和height,一个点名串对应的就是一段区间,还有很多个点,就转化成了 有很多个区间,很多个点集,对每个区间计算和多少个点集有交,对每个 ...

  2. HTML-JS 循环 函数 递归

    [循环结构的执行步骤] 1.声明循环变量 2.判断循环条件 3.执行循环体操作 4.更新循环变量 然后,循环执行2-4,直到条件不成立时,跳出循环. while循环()中的表达式,运算结果可以是各种类 ...

  3. eclipse + maven + org.glassfish.jersey 创建 webapi

    org.glassfish.jersey 和 com.sun.jersey 的区别是,jersy version 2 之前是 com.sun.jersy, 之后改名为 org.glassfish.je ...

  4. 使用node-webkit(v0.35.5)和innosetup(3.6.1)打包将web程序打包为桌面客户端(安装包)

    这边主要是有一个客户,需要在电视机上安装一个客户端,含有视频直播功能:刚开始我们采用的webapp打包成apk安装在电视机上,发现摄像头监控画面根本无法播放(apk在手机上可以正常播放视频):排除一些 ...

  5. Unity 2D相机公式换算(从其他博客上抄的)

    2d camera, unit坐标,单位换算 2d游戏可以使用平行投影的camera,这种camera需要设置size (orthographicSize),size的含义为屏幕高度的一半,不过单位不 ...

  6. Unity角色对话

    对话类------------------------------------------------------------------------------------------------- ...

  7. 基于tensorflow 1.x 的检索机器人chatbot-retrieval

    Chatbot-retrieval说基于tensorflow的检索机器人,原版的代码路径是 https://github.com/dennybritz/chatbot-retrieval, 但是在te ...

  8. Java并发编程(详解wait(), notify(),sleep())

    http://blog.csdn.net/luckyzhoustar/article/details/48179161

  9. Backbone.js源码浅介

    终于看到一个只有一千多行的js框架了,于是抱着一定可以看懂他的逻辑的心态,查看了他的整个源码,进去之后才发现看明白怎么用容易,看懂怎么写的就难了,于是乎有了这篇博客的标题:浅介,只能粗浅的介绍下Bac ...

  10. Linux内核分析(第三周)

    构造一个简单的linux系统menuOS. 一.简介 1.两把宝剑:中断-上下文的切换(保存现场和恢复现场) 进程-上下文的切换 2.linux-3.18.6 arch/x86目录下的代码是我们重点关 ...