博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【JavaScript】关于 eval()执行JavaScript语句的一次实验测试
阅读量:4960 次
发布时间:2019-06-12

本文共 2302 字,大约阅读时间需要 7 分钟。

实验主题:

eval() 函数可以计算某个字符串,并执行其中的 JavaScript 代码。该函数只接受原始字符串作为参数,如果 string 不是原始字符串,那么该方法将不作任何的改变的返回。因此请不要为 eval() 函数传递 String 对象来作为参数。

如果试图覆盖 eval 属性或把 eval() 方法赋予另一个属性,并通过该属性调用它,则ECMAScript 实现允许抛出一个 EvalError 异常。

eval() 语法:

eval(string)
参数 描述
string 必须。要计算的字符串,其中含有要计算的 JavaScript 表达式或要执行的语句。

 

eval() 返回值:通过计算 string 得到的值(如果有的话)。

附:eval 可能是 evaluate 的缩写。

实验测试:

function bar1(){	eval("x=10; y=20; document.write(x*y);");	document.write("
" + eval("2+2")); var x=10; document.write("
" + eval(x=17));}//依次在页面输出200,4,17。无异常抛出。

 

function bar2() {	try{		eval("a");// 抛出异常:ReferenceError: a is not defined		eval("x+");// 抛出异常:SyntaxError: Unexpected end of input		// 其他的异常有非法调用eval()异常,抛出EvalError异常		// 如果传递给eval()的JavaScript代码生成了一个异常,eval()将把该异常传递给调用者	} catch(err) {		alert(err);	}}
var MouseText = new Array(7);MouseText[1] = "W";MouseText[2] = "c";MouseText[3] = "l";MouseText[4] = "c";MouseText[5] = "o";MouseText[6] = "m";MouseText[7] = "e";var javaCode = "document.write('Hello!');";// javaScript语句变量function bar3() {	try{		w=eval(MouseText[1]);// 测试返回值,这里应该算是隐式声明了全局变量W,但是MouseText[1] = "W",而"W"只是一个常量,不是一个语句,所以抛出异常:ReferenceError: W is not defined		document.write(w);// 注释掉这一行上面依然抛出异常		// 修改后		var w=eval("MouseText[1];");// 加上双引号扩起JS语句,句末最好加个分号		document.write(w);// 正常输出"W"	} catch(err) {		alert(err);	}}

 

var javaCode = "document.write('Hello!');";// javaScript语句变量function bar4() {	try{		eval(javaCode);// 正常输出"Hello!"		// 等效于:eval("document.write('Hello!');");	} catch(err) {		alert(err);	}}

 

function bar5() {	document.write(eval("2+3")+"
"); var myeval = eval;// 可能会抛出 EvalError 异常 alert(typeof(myeval));// 输出function document.write(myeval("2+3"));// 可能会抛出 EvalError 异常}
// 用户输入表达式并计算function output() {	try {		alert("Result: " + eval(prompt("Enter an exception: ")));	} catch(exception) {		alert(exception);	}}

实验总结:

eval() 虽然是一个功能强大的函数,但是在实际的开发中用的并不多。还有就是关于 document.write() 函数的使用问题,在使用该函数时,一定要等页面加载完成后使用该函数。不然会抛出一个警告:

Failed to execute 'write' on 'Document': It isn't possible to write into a document from an asynchronously-loaded external script unless it is explicitly opened.

目前关于这个问题还没有进行具体的分析,只知道调用 document.write() 函数后页面会重新刷新一次,在输出内容。

附:

function bar1() {	alert(typeof(eval("document.write('!!!!');")));// undefined};

返回值为 undefined。

转载于:https://www.cnblogs.com/1000sakura/p/10743274.html

你可能感兴趣的文章
数据类型及操作
查看>>
提高前端开发效率的N种方法
查看>>
第一个Vus.js
查看>>
10款最好的Python IDE
查看>>
js如何获取样式?
查看>>
保护视力最佳电脑窗口颜色配置Win7、Vista和XP适用!转
查看>>
一道题的分析
查看>>
JS身份证验证
查看>>
1039 到底买不买 (20 分)
查看>>
关于CentOS下 yum包下载下的rpm包放置路径
查看>>
centos下添加epel源
查看>>
在SQLServer 2005附加SQLServer 2008数据库异常处理
查看>>
网易新闻侧滑抽屉效果(利用父子控制器实现)
查看>>
Ceph:pg peering过程分析
查看>>
4.高级特性(1)
查看>>
[leedcode 55] Jump Game
查看>>
Html 播放 mp4格式视频提示 没有发现支持的视频格式和mime类型
查看>>
事务 事务隔离级别
查看>>
压缩、解压缩命令(笔记)
查看>>
linux解压war包的命令
查看>>