一、序列化

  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. LOJ#6354. 「CodePlus 2018 4 月赛」最短路[最短路优化建图]

    题意 一个 \(n\) 个点的完全图,两点之间的边权为 \((i\ xor\ j)*C\) ,同时有 \(m\) 条额外单向路径,问从 \(S\) 到 \(T\) 的最短路. \(n\leq 10^5 ...

  2. elasticsearch同步mongodb--mongo connector的使用

    部署准备 python-3.6.4-amd64.exe mongodb-win32-x86_64-3.4.6-signed.msi  (如果已经安装可以忽略) 注意点! 之前我写的一篇文章用的是ela ...

  3. fastDFS教程Ⅱ-文件服务器迁移

    在实际的项目应用中,由于服务器替换或项目变更难免会存在fastDFS文件服务器迁移的工作.本文重点介绍fastDFS文件系统在不同情况下的文件迁移处理方案. 1.迁移时IP地址不变 通过文件服务器存储 ...

  4. Scala基础(1)

    Scala基础语法 声明与定义: val,常量声明                       val  x:T(把x声明成一个类型为T的常量)  x是变量的名字,T是变量的类型          v ...

  5. MySQL数据库--外键约束及外键使用

    什么是主键.外键关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键. 比如: 学生表(学号,姓名,性别,班级) 其中每个学生的学号是唯 ...

  6. centos7 设置静态IP

    centos7 设置静态IP 一.查找配置文件(/etc/sysconfig/network-scripts) [root@bogon network-scripts]# ll 总用量 232 -rw ...

  7. Python在函数中使用*和**接收元组和列表

    http://blog.csdn.net/delphiwcdj/article/details/5746560

  8. 一份超全超详细的 ADB 用法大全

    http://blog.csdn.net/u010375364/article/details/52344120

  9. 爬虫项目之NABC

    Need 在如今的互联网市场上相关的网络爬虫软件已然很多,要想赢得客户,高效.稳定.创新都必不可少的. 我们初步阅读和运行了上一届团队的项目,决定从以下几个方面修改和完善创新这一项目: 1.改善对爬取 ...

  10. Daily Scrum - 11/23

    今天更新blog时发现了老师对我们daily scrum提的要求,从明天起除了简要记录组会的主要内容之外,还会总结上一个工作日每个组员的工作进度.代码提交情况和燃尽图. 今天会议内容主要是人千.章玮同 ...