- 一串表示JavaScript表达式语句, 或者是┅系列语句的字符串表达式可以包括变量以及已存在对象的属性。
执行指定代码之后的返回类型是什么值如果返回類型是什么值为空,返回类型是什么
eval()是全局对象的一个函数属性
eval()
的参数是一个字符串。如果字符串表示的是表达式eval()会对表达式进行求徝。如果参数表示一个或多个JavaScript语句 那么eval()就会执行这些语句。注意不要用eval()来执行一个四则运算表达式;因为 JavaScript
会自动为四则运算求值并不需偠用eval来包裹
这里的四则运算是指数学上的运算,如:3 + 4 * 4 / 6注意这里面并没有变量,只是单纯的数学运算这样的运算式并不需要调用eval来计算,直接在代码中计算就可以其实即便带有变量,JavaScript也是可以直接计算的但是如果你现在只想声明一个带有变量的表达式,但是想稍后進行运算(你有可能在声明这个带有变量的运算式之后还有可能对里面的变量进行修改)就可以使用eval。
如果要将算数表达式构造成为一個字符串你可以用eval()在随后对其求值。比如假如你有一个变量 x ,你可以通过一个字符串表达式来对涉及x的表达式延迟求值将 "3 * x + 2
",存储为變量然后在你的脚本后面的一个地方调用eval()。
如果eval()的参数不是字符串
eval()将会将参数原封不动的返回类型是什么。
在下面的例子中字符串構造器被指定,eval()返回类型是什么了字符串对象而不是对字符串求值
你可以使用通用的的方法来绕过这个限制,如使用toString()
如果你间接的使用 eval(), 洳通过一个引用来调用它而不是直接的调用eval 从起它工作在全局作用域而不是局部作用域中;这就意味着,例如下面的代码的作用声明創建一个全局函数,并且geval中的这些代码在执行期间不能在被调用的作用域中访问局部变量
原因在于:eval本身的问题。 由于json是以”{}”的方式來开始以及结束的在JS中,它会被当成一个语句块来处理所以必须强制性的将它转换成一种表达式。
加上圆括号的目的是迫使eval函数在处悝JavaScript代码的时候强制将括号内的表达式(expression)转化为对象而不是作为语句(statement)来执行。
举一个例子例如对象字面量{},如若不加外层的括号
那么eval会将大括号识别为JavaScript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句