JS eval()函数的一些见解

一、eval是基本使用规则

  • 1 eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。
  • 2 eval(string)
  • 3 string必需。要计算的字符串,其中含有要计算的 JavaScript 表达式或要执行的语句。
  • 4 eval()只有一个参数。
  • 5 eval使用比较不安全,忘慎重使用

二、eval的错误使用方法

  • 1 如果传入的参数不是字符串,它直接返回这个函数。
  • 2 如果参数是字符串,它会把字符串当成JavaScript代码进行编译,如果编译失败者抛出一个语法错误异常。
  • 3 如果编译成功,则开始执行这一段代码,并返回字符串中的最后一个表达式或语句的值,
  • 4 如果最后一个表达式或语句没有值,则最终返回undefined。

三、使用例子

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>eval</title>
	</head>
	<body>		

		<script type="text/javascript">

             //正确输入
                var x = 10;
                document.write(eval(10*x + 10)) //表达式 输出110
                document.write("<br />");
                document.write(eval("10 == x")); //表达式 输出true
                document.write("<br />");
			    eval(document.write(2+5*x));   //执行语句 输出52

            //非正常输入
             try{
             	var y = 8;
			    //表达式
			    document.write(eval("9+6*x"+"100"));  //如果参数中没有合法的表达式和语句,则抛出 SyntaxError 异常。
			    document.write("<br />");
                eval(‘++++2‘);     //编译失败ReferenceError异常
                eval(document.write(2+2)); //编译成功
                document.write(eval());   //返回undefined

               var my = eval();             //如果试图覆盖 eval 属性或把 eval() 方法赋予另一个属性,
               document.write(my(1+2));    //并通过该属性调用它,则 ECMAScript 实现允许抛出一个 EvalError 异常。

                }

			 catch(exception) {
               alert(exception);
             }

		</script>

	</body>
</html>

  我自己查了好多资料,也还很模糊,希望了解的大神能指点指点!

时间: 2024-10-11 12:07:26

JS eval()函数的一些见解的相关文章

js eval函数使用,js对象和字符串互转.

JavaScript eval() 函数  JavaScript 全局函数 定义和用法 eval() 函数计算 JavaScript 字符串,并把它作为脚本代码来执行. 如果参数是一个表达式,eval() 函数将执行表达式.如果参数是Javascript语句,eval()将执行 Javascript 语句. 语法 eval(string) 参数 描述 string 必需.要计算的字符串,其中含有要计算的 JavaScript 表达式或要执行的语句. <!DOCTYPE html> <ht

js eval()函数

定义和用法 eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码. 语法 eval(string); eval()函数接收一个参数s,如果s不是字符串,则直接返回s.否则执行s语句.如果s语句执行结果是一个值,则返回此值,否则返回undefined. 需要特别注意的是对象声明语法"{}"并不能返回一个值,需要用括号括起来才会返回值. 实际用法举例: 1.利用字符串创建变量: var abc=20; var i="ab"; alert(i+&

js模版引擎开发实战以及对eval函数的改进

简介 前段时间,想着自己写一个简单的模版引擎,便于自己平时开发demo时使用,同时也算是之前学习的知识的一种总结吧! 首先我们先了解一下模版引擎的工作原理吧! 1. 模版引擎其实就是将指定标签的内容根据固定规则,解析为可执行语句字符串: 2. 执行可执行解析后的语句字符串,即生成我们想要的页面结构. 具体实现方法: 1. 最终效果 1 /* 解析前 2 <ul> 3 {{for(var i = 0; i < data.todos.length; ++i)}} 4 {{if(data.to

Java 实现 JS的eval函数

JS的eval 函数, 给个表达式做参数, 返回表达式的值. Java的脚本引擎可以实现这个功能. 例子:   拼接一个字符串 \uxxxx, Unicode的十六进制编码, 然后把它打印出来. 即输入一个'\u5236' 字符串, 然后输出一个中文Unicode字符"制". package test; import javax.script.ScriptEngine;import javax.script.ScriptEngineManager;import javax.script

如何在前端模版引擎开发中避免使用eval函数

前段时间,想着自己写一个简单的模版引擎,便于自己平时开发demo时使用.于是根据自己对模版引擎的理解,定义自己的模版格式,然后,根据自己定义的格式,编写处理函数,将模版标签中的字符串,解析成可执行的字符串,然后再用eval函数执行该可执行的字符串. 然后问题就出现了!eval等价于evil! 为什么呢?各大js权威书籍上都不提倡使用eval.下面我详细的解释一下为什么不提倡. 首先,大家需要知道,js并不是一门解释型语言.它和其他大家熟知的编程语言(c,java,c++)一样,是编译型语言.但是

微信小程序开发之不能使用eval函数的问题

一 eval函数问题 JavaScript中的eval函数是颇受开发者争议的问题之一,问题主要在于其可能导致的不安全性.有关此方面问题,在此不再赘述,读者可能很容易地浏览到许多介绍性文章. 但是,eval函数的优点也是很明显的.例如,使用JS编写一个计算器程序,在遇到"2+1-3*5"这样的字符串时,使用eval就可以很容易地计算出,类似如: var s="2+1-3*5"; console.log(eval(s)); 二 微信小程序练手遇到问题 (1)微信小程序环

关于eval()函数处理后台返回的json数据

对于服务器返回的JSON字符串,如果jquery异步请求没做类型说明,或者以字符串方式接受,那么需要做一次对象化处理,方式不是太麻烦,就是将该字符串放于eval()中执行一次.这种方式也适合以普通javascipt方式获取json对象,以下举例说明: var dataObj=eval("("+data+")");//转换为json对象 为什么要 eval这里要添加 ("("+data+")")呢? 原因在于:eval本身的问题

浅谈JavaScript eval() 函数

用js的人都应该知道eval()函数吧,虽然该函数用的极少,但它却功能强大,那么问题来了,为什么不常用呢?原因很简单,因为eval()函数是动态的执行其中的字符串,里面有可能是脚本,那么这样的话就有可能引发系统的安全问题,所以能不用就不用,但至少也要知道它的用法. eval()函数的作用简单来说就是用来把括号中的字符串当作代码来执行,举个简单的例子,eval("2+3") ,返回的就是5.需要注意的是该方法就受的只能是原始的字符串参数,如果不是的话它将什么都不会做原样返回,所以你给它传

[Effective JavaScript 笔记]第17条:间接调用eval函数优于直接调用

eval函数不仅仅是一个函数.大多数函数只访问定义它们所在的作用域,而不能访问除此之外的作用域(词法作用域).eval函数具有访问调用它时的整个作用域的能力.编译器编写者首次设法优化js时,eval函数很难高效地调用任何一个函数,因为一旦调用的函数是eval函数,那么每个函数调用都需要确保在运行时整个作用域对eval函数是可访问的.语言标准演化出辨别两种不同的调用eval的方法.第一种方式:函数调用涉及eval标识符,被认为是一种“直接”调用eval函数的方式.编译器需要确保被执行的程序具有完全