半步多 玄玉V笔记

json和js的关系

2010-12-10
玄玉
 

json实际上是js的一个子集,JavaScript1.2开始就已经内含了JSON的实现

通过JavaScript中的eval()函数可以将字符串形式的JSON表达式转化成真正的JSON对象

eval的示例

eval()是JavaScript中很早就出现的一个函数,它的功能很强,但是容易引发一些安全问题

比如说eval()会动态的执行字符串形式的JavaScript脚本,恶意用户如果注入脚本的话就会导致页面出现危险

所以,下面的例子中,会在eval()括号中再显式添加两个小括号

/**
 * eval()的示例
 */
var obj = "{name: 'zhangsan'}";
var jsonObj = eval("(" + obj + ")");
// 浏览器弹出name框
alert(jsonObj.name);
// 浏览器控制台打印json对象的字符串
console.log(JSON.stringify(jsonObj));

子集的示例

/**
 * 子集的示例
 */
var stu = {name:'沈浪', age:22, sex:'', favorate:['义胆','行侠','斗智'], say:function(){alert(this.name+"\r\n"+this.age+"\r\n"+this.favorate);}};
//输出属性(两种写法都支持)
alert(stu.name + "--" + stu["age"]);
//调用方法
stu.say();

encodeURI的示例

JavaScript 中的推荐做法:

  • 使用 encodeURI() 对 URI 的网址部分编码
  • 使用 encodeURIComponent() 对 URI 中的参数部分编码
// escape()
// 说明:它不编码的字符有69个:* + - . / @ _ 0-9 a-z A-Z
// 注意:它只能对ASCII符号正确编码,ECMAScript_v3反对使用该方法,推荐decodeURI()和decodeURIComponent()替代它

// decodeURI()
// 说明:它不编码的字符有82个:# $ & ( ) ~ ! ' , : ; = ? * + - . / @ _ 0-9 a-z A-Z
// 注意:它不对 URI 中的特殊字符(如冒号或斜杠等)进行编码,所以它可用于对 URI 的网址部分进行编码

// encodeURIComponent()
// 说明:它不编码的字符有71个:! ' ~ ( ) * - . _ 0-9 a-z A-Z
// 注意:它对冒号或斜杠等都进行了编码,故不适用于网址的编码,其更适合对 URI 中的参数进行编码

// 下面会弹出:https://www.xuanyuv.com/is%20my%20blog.html
alert(encodeURI("https://www.xuanyuv.com/is my blog.html"));

// 下面会弹出:https://www.xuanyuv.com/login?name=%E9%90%9C%E5%8B%AD%E5%B8%80
alert('https://www.xuanyuv.com/login?name=' + encodeURIComponent('玄玉'));

// 下面会弹出:https%3A%2F%2Fwww.xuanyuv.com%2Flogin%3Fname%3D%E9%90%9C%E5%8B%AD%E5%B8%80
alert(encodeURIComponent('https://www.xuanyuv.com/login?name=玄玉'));

Content