您的位置:首页 > Web前端 > JavaScript

js 字符串对象名使用

2014-05-07 16:35 232 查看
     非常多的时候我们得到的可能是对象的字符串形式,这时候你可能会想到eval:


定义和用法

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');

[]和.运算的功能是一样,[]支持传入字符串
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: