1. eval的用法?

  • eval() 函数可以用来计算某个字符串,并执行其中的javascript代码。其语法eval(string);
  • 如果传入的参数不是字符串,则直接返回这个参数。

2.eval在什么时候使用?

  • 当我们预先不知道执行什么语句,只有条件和参数给定时才知道执行什么语句
  • demo
<!DOCTYPE html>
<html>
<head>
	<title></title>
	<style type="text/css">
		#box{
			width: 406px;
			height: 500px;
			border: 1px solid black;
			margin: 50px auto;
 
		}
		#screen{
			width: 100%;
			height: 100px;
			
			font: 20px ;
			text-align: right ;
			/*overflow: hidden;*/
		}
		#top,#bottom {
			width: 100%;
			height: 49px;
			border-bottom: 1px solid black;
			float: left;
		}
		#number{
			width: 306px;
			float: left;
		}
		
		#mark{
			width: 100px;
			/*height: 00px;*/
			
			float: left;
		}
		
		#number div{
			width: 100px;
			height: 100px;
			border: 1px solid black;
			float: left;
		}
		#mark div{
			height: 100px;
			border: 1px solid black;
		}
		.center {
			text-align: center;
			font: 20px/100px 'simhei';
		}
	</style>
</head>
<body>
	<div id="box">
		<div id="screen">
			<div id="top"></div>
			<div id="bottom"></div>	
		</div>
		<div id="number" class="center">
			<div value='1'>1</div>
			<div value='2'>2</div>
			<div value='3'>3</div>
			<div value='4'>4</div>
			<div value='5'>5</div>
			<div value='6'>6</div>
			<div value='7'>7</div>
			<div value='8'>8</div>
			<div value='9'>9</div>
		</div>
		<div id="mark" class="center">
			<div value='+'>+</div>
			<div value='-'>-</div>
			<div value='='>=</div>
		</div>
	</div>
	<script type="text/javascript">
		var num = document.getElementById('number');
		var	number = num.getElementsByTagName('div');
		var mark = document.getElementById('mark').getElementsByTagName('div');
		var screen = document.getElementById('screen');
		var top1 = document.getElementById('top');
		var bottom = document.getElementById('bottom');
		addClick(number);
		addClick(mark);
		function addClick(obj) {
           console.log(obj)
			for (var i = 0; i < obj.length; i++) {
			 	obj[i].onclick = function () {
			 		if (this.innerHTML== '=') {
                         var str = bottom.innerHTML;
			 			var result = eval(str);
			 			top1.innerHTML = bottom.innerHTML + '=';
			 			bottom.innerHTML = result;
			 		}else{
			 			bottom.innerHTML += this.innerHTML;
			 		}
			 	}
		 	 }
		}
	</script>
</body>
</html>

EVAL IS EVIL?(eval 函数是魔鬼吗?)

3.why eval is evil ?

eval is evil这句话是Douglas Crockford 说的。“邪恶”通常意味着“危险”,或则更加准确的说:“能够通过简单的命令造成很大的问题”。那我们什么时候使用这些“邪恶”的东西。或则说当我们知道危险是什么时,如何采取适当的预防措施?

eval的危险性?

eval函数可能有许多小的问题,当时总的来说有两个大的问题,是人们认为eval邪恶的原因。(性能和代码注入)

  • 性能 --运行eval函数需要运行解释器/编译器。如果你的代码是编译的,那么这是一个很大的问题,因为你需要调用一个很重的编译器。但是javascript是一门解释性语言,这意味着在一般的情况下eval函数并不可能有很大的性能影响。我认为,javascript在解析期间也是需要调用,解释器或编译器。而不是需要在单独的调用另一个解释器或编译器。这这种情况下eval函数并没有比浪费你时间的那些函数更“邪恶”
  • 代码注入问题 eval可能在权限提升的情况下运行一些代码。比如在管理员或root权限下运行像"rm -rf something-important"这样的字符串。但是在浏览器中的javascript没有这个问题,因为程序无论如何都是在用自己的账户中运行。

eval is evil ?

可能每个独立的问题,都需要单独处理。当就本身而言,我并不认为eval is evil。

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-01-05
  • 2021-10-18
  • 2021-05-29
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-07-21
  • 2022-03-01
  • 2021-11-02
相关资源
相似解决方案