js 字符串对象名使用
2014-05-07 16:35
232 查看
非常多的时候我们得到的可能是对象的字符串形式,这时候你可能会想到eval:
eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。
如果试图覆盖 eval 属性或把 eval() 方法赋予另一个属性,并通过该属性调用它,则 ECMAScript 实现允许抛出一个 EvalError 异常。
如果非法调用 eval(),则抛出 EvalError 异常。
如果传递给 eval() 的 Javascript 代码生成了一个异常,eval() 将把该异常传递给调用者。
提示:虽然 eval() 的功能非常强大,但在实际使用中用到它的情况并不多。
输出:
可以使用下面这段代码来检测 eval() 的参数是否合法:
如上是w3school的示例,更常用到的可能是从服务器端获取的json字符串,所以我们一般会这样:
var jsonObj = eval("(" + json + ")");
为什么要加括号呢?原因是加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。
alert(eval("{}"); // return undefined
alert(eval("({})");// return object[Object]
eval可以用来解析任何javascrtipt代码,因此就存在一个很大的安全隐患。有些人可以注入一些与预期的json数据结构相符的JavaScript代码,而该代码传入eval()之后就可以被执行。所以应该尽量避免少用eval,比如函数等对象我们可以用另一种方式替代:
window['alert']('test');
[]和.运算的功能是一样,[]支持传入字符串
定义和用法
eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。语法
eval(string)
参数 | 描述 |
---|---|
string | 必需。要计算的字符串,其中含有要计算的 JavaScript 表达式或要执行的语句。 |
返回值
通过计算 string 得到的值(如果有的话)。说明
该方法只接受原始字符串作为参数,如果 string 参数不是原始字符串,那么该方法将不作任何改变地返回。因此请不要为 eval() 函数传递 String 对象来作为参数。如果试图覆盖 eval 属性或把 eval() 方法赋予另一个属性,并通过该属性调用它,则 ECMAScript 实现允许抛出一个 EvalError 异常。
抛出
如果参数中没有合法的表达式和语句,则抛出 SyntaxError 异常。如果非法调用 eval(),则抛出 EvalError 异常。
如果传递给 eval() 的 Javascript 代码生成了一个异常,eval() 将把该异常传递给调用者。
提示和注释
提示:虽然 eval() 的功能非常强大,但在实际使用中用到它的情况并不多。
实例
例子 1
在本例中,我们将在几个字符串上运用 eval(),并看看返回的结果:<script type="text/javascript"> eval("x=10;y=20;document.write(x*y)") document.write(eval("2+2")) var x=10 document.write(eval(x+17)) </script>
输出:
200 4 27
例子 2
看一下在其他情况中,eval() 返回的结果:eval("2+3") // 返回 5 var myeval = eval; // 可能会抛出 EvalError 异常 myeval("2+3"); // 可能会抛出 EvalError 异常
可以使用下面这段代码来检测 eval() 的参数是否合法:
try { alert("Result:" + eval(prompt("Enter an expression:",""))); } catch(exception) { alert(exception); }
如上是w3school的示例,更常用到的可能是从服务器端获取的json字符串,所以我们一般会这样:
var jsonObj = eval("(" + json + ")");
为什么要加括号呢?原因是加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。
alert(eval("{}"); // return undefined
alert(eval("({})");// return object[Object]
eval可以用来解析任何javascrtipt代码,因此就存在一个很大的安全隐患。有些人可以注入一些与预期的json数据结构相符的JavaScript代码,而该代码传入eval()之后就可以被执行。所以应该尽量避免少用eval,比如函数等对象我们可以用另一种方式替代:
window['alert']('test');
[]和.运算的功能是一样,[]支持传入字符串
相关文章推荐
- 关于json.dumps中的ensure_ascii
- 用实例谈谈javascript中的this和prototype
- (转)在网页中JS函数自动执行常用三种方法
- phantomjs render options
- Js参数值中含有单引号或双引号问题的解决方法
- Json字符串与Json对象互转
- JS 图表
- js 数组元素随机排序
- js 常用验证
- JavaScript你所不知道的困惑(1)
- JavaScript你所不知道的困惑(1)
- html 通过js获得文件路径(适用于ie)
- JS实现简单的图片轮转
- JavaScript String对象方法(二)
- 认识DOM和DOM加载过程以及如何让DOM加载完成后再执行js脚本文件
- JS正则表达式使用详解
- js网页中调用本地应用程序
- js读取修改创建txt文本类型文件(.ini)
- JavaScript简易教程
- ExtJs4学习笔记一--基础知识