实验主题:

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("<br>" + eval("2+2"));
var x=10;
document.write("<br>" + 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")+"<br/>");
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。

【JavaScript】关于 eval()执行JavaScript语句的一次实验测试的更多相关文章

  1. JavaScript中Eval()函数的作用

    这一周感觉没什么写的,不过在研究dwz源码的时候有一个eval()的方法不是很了解,分享出来一起学习 -->首先来个最简单的理解 eval可以将字符串生成语句执行,和SQL的exec()类似. ...

  2. Javascript脚本 : eval()函数

    Javascript 中 eval(X)函数 是将参数 当做语句来执行 var number1='1+2'; alert(number1); 输出为 '12': var number2=eval('1 ...

  3. Python selenium中注入并执行Javascript语句

    众所周知,Python通常结合selenium模块来完成一些web的自动化测试以及RPA(Robotic Process Automation)工作.事实上,Selenium还可以支持插入js语句.执 ...

  4. 爬虫之动态HTML处理(Selenium与PhantomJS )执行 JavaScript 语句

    执行 JavaScript 语句 1.隐藏百度图片 from selenium import webdriverimport time driver = webdriver.PhantomJS()dr ...

  5. 案例:执行 JavaScript 语句

    隐藏百度图片 # coding=utf-8 from selenium import webdriver driver = webdriver.PhantomJS(executable_path=r' ...

  6. javascript 核心语言笔记 5 - 语句

    表达式在 JavaScript 中是短语(phrases),那么语句(statements)就是 JavaScript 整句或命令,语句以分号结束.表达式计算出一个值,语句用来执行以使某件事情发生 表 ...

  7. JavaScript学习笔记-表达式和语句

    表达式和语句 eval( ) 只有一个参数 参数非字符串时,直接返回这个参数: 参数为字符串时,它把字符串当成JavaScript代码进行编译,编译失败则抛出语法错误,编译成功则执行代码,并返回最后一 ...

  8. C#执行Javascript代码的几种方法

    一.开源项目 Javascript .NET 地址: http://javascriptdotnet.codeplex.com/ 它是Google Chrome V8引擎在.NET上的封装,功能完善, ...

  9. JQuery html API支持解析执行Javascript脚本功能实现-代码分析

    JQuery html用法(功能类似innerHTML) 开发中需要使用Ajax技术来更新页面局部区域, 使用的方法是ajax获取html代码段(字符串),然后将这个html代码段作为参数,传入目标D ...

随机推荐

  1. Oracle创建用户、表(1)

    Oracle创建用户.表(1) 1. 连接 C:\Users\LEI>sqlplus / as sysdba SQL*Plus: Release 12.1.0.2.0 Production on ...

  2. 解决ajax 遇到session失效后自动跳转的问题

    在项目中,经常会遇到session失效后,点击任何链接无反应的情况!这样给客户的体验就不是很好,以为是系统出了故障!所以在项目中我们会处理session失效后的跳转问题(一般给用户提示,并跳转后登录页 ...

  3. javascript报错:ReferenceError: $ is not defined解决办法

    原因很简单,要么是未导入jquery包,要么是导入的顺序不对. 例如,我在制作Chrome扩展程序时,其中的一块代码如下: 然后运行时报上述错误. 解决方法:我们不难发现script位置有问题,因为$ ...

  4. kubernetes-深入理解pod对象(七)

    Pod中如何管理多个容器 Pod中可以同时运行多个进程(作为容器运行)协同工作.同一个Pod中的容器会自动的分配到同一个 node 上.同一个Pod中的容器共享资源.网络环境和依赖,它们总是被同时调度 ...

  5. js类型判别大合集

    1.typeof number,string,boolean,undefined,symbol,object,function 对象中除了函数为function,其他对象都判别为object, 缺陷: ...

  6. IEDA的安装与破解

    百度搜索IDEA 进入官网下载 https://www.jetbrains.com/idea/download/#section=windows 2.下载好双击即可 3. 完成破解

  7. Sum All Numbers in a Range-freecodecamp算法题目

    Sum All Numbers in a Range 要求 给你一个包含两个数字的数组.返回这两个数字和它们之间所有数字的和. 最小的数字并非总在最前面. 思路 定义结果变量num 在for循环中,i ...

  8. 【Git版本控制】git将单个文件回退到某一版本

    暂定此文件为a.jsp 1.进入到a.jsp所在目录,通过 git  log a.jsp查看a.jsp的更改记录 2.找到想要回退的版本号:例如 fcd2093 通过 git reset   fcd2 ...

  9. Git下的gitignore规则介绍

    匹配模式前/代表项目根目录 匹配模式最后加/代表是目录 匹配模式前加!代表取反 (忽略文件夹,但不忽略文件夹下的某个文件) *代表任意个字符 ? 匹配任意一个字符 **匹配多级目录 node_modu ...

  10. 通过composer安装阿里大于接口扩展

    # 安装laravel阿里大鱼服务 composer require iscms/alisms-for-laravel laravel配置 # 注册服务 # 在config\app.php文件中找到P ...