搜索
您的当前位置:首页正文

javascripteval函数深入认识_javascript技巧

2023-12-02 来源:字库网

(1)介绍javascript中的eval函数的用法 (2)如何在函数内执行全局代码 ►先来说eval的用法,内容比较简单,熟悉的可以跳过。 eval函数接收一个参数s,如果s不是字符串,则直接返回s。否则执行s语句。如果s语句执行结果是一个值,则返回此值,否则返回undefined。 需要特别注意的是对象声明语法“{}”并不能返回一个值,需要用括号括起来才会返回值,简单示例如下: var code1='"a" + 2'; //表达式 var code2='{a:2}'; //语句 alert(eval(code1)); //'a2' alert(eval(code2)); //undefined alert(eval('(' + code2 + ')')); //[object Object] 可以看到,对于对象声明语句来说,仅仅是执行,并不能返回值。为了返回常用的“{}”这样的对象声明语句,必须用括号括住,以将其转换为表达式,才能返回其值。这也是使用JSON来进行Ajax开发的基本原理之一。在例子中可以清楚的看到,第二个alert语句输出的是undefined,而第三个加了括号后输出的是语句表示的对象。 ►现在来说本文的重点,如何在函数内执行全局代码。为了说明这个问题,先看一个例子: var s='global'; //定义一个全局变量 function demo1(){ eval('var s="local"'); } demo1(); alert(s); //global 很好理解,上面的demo1函数等价于:function demo1(){var s='local';},其中定义了一个局部变量s。 所以最后的输出是global并不是什么奇怪的事情,毕竟大家都能很清楚的区分局部变量和全局变量。 仔细体会一下,可以发现eval函数的特点,它总是在调用它的上下文变量空间(也称为:包,closure)内执行,无论是变量定义还是函数定义都是如此,所以如下的代码会产生函数未定义的错误: var s='function test(){return 1;}'; //一个函数定义语句 function demo2(){ eval(s); } demo2(); alert(test()); //error:test is not defined 这是因为test函数在局部空间定义,demo2函数内可以访问到,外面就访问不到了。 而在实际的Ajax开发中,有时我们需要从服务器动态获取代码来执行,以减轻一次载入代码过多的问题,或者是一些代码是通过Javascript自身生成的,希望用eval函数来使其执行。 但这样的动态获取代码的工作一般在函数内完成,比如: function loadCode(){ var code=getCode(); eval(code); } 可见eval不可能在全局空间内执行,这就给开发带来了不少问题,也看到过很多人为此郁闷。 不过现在偶终于找到了解决办法,嘿嘿,可以同时兼容IE和Firefox,方法如下: var X2={} //my namespace:) X2.Eval=function(code){ if(!!(window.attachEvent && !window.opera)){ //ie execScript(code); }else{ //not ie window.eval(code); } } 现在如果要想在函数内定义全局代码,就可以通过调用X2.Eval(code)方法,一个例子如下: var s='global'; function demo3(){ X2.Eval('var s="local"'); } demo3(); alert(s); //'local' 可见,在demo3函数内重新定义了全局变量s="local"。 需要注意的是X2.Eval并不返回值,如果要进行表达式的求值,还是用系统的eval函数。X2.Eval设计为仅做全局代码定义用。 其实看到这里,或许有人感觉问题也太容易解决了点,呵呵,但发现这个办法倒是需要些运气和技巧的: (1)对于IE浏览器,默认已经提供了这样的函数:execScript,用于在全局空间执行代码,只是知道的人还不多。 (2)对于Firefox浏览器,直接调用eval函数,则在调用者的空间执行;如果调用 window.eval则在全局空间执行。这个知道的人估计就更少了。毕竟alert(eval==window.eval)返回true! Firefox的eval函数的特点的确是很令人奇怪的,但从javascript规范中倒也能找到其来源: If value of the eval property is used in any way other than a direct call (that is, other than by the explicit use of its name as an Identifier which is the MemberExpression in a CallExpression), or if the eval property is assigned to, an EvalError exception may be thrown. 意思大概就是说eval函数的执行是和调用者相关的,但并没有说其执行上下文的问题。所以IE和Firefox孰是孰非也就很难说了,大家知道解决办法就好。

小编还为您整理了以下内容,可能对您也有帮助:

eval是什么函数?

eval() 函数作用是可以接受一个字符串str作为参数,并把这个参数作为脚本代码来执行。

如果参数是一个表达式,eval() 函数将执行表达式; 如果参数是Javascript语句,eval()将执行 Javascript 语句。(如果执行结果是一个值就返回,不是就返回undefined,如果参数不是一个字符串,则直接返回该参数)。

eval()函数并不会创建一个新的作用域,并且它的作用域就是它所在的作用域,有时候需要将eval()函数的作用域设置为全局,当然可以将eval()在全局作用域中使用,这个时候可以用window.eval()的方式实现。

eval() 函数案例

eval("var a=1");//声明一个变量a并赋值1。

eval("2+3");//执行加运算,并返回运算值。

eval("mytest()");//执行mytest()函数。

eval("{b:2}");//声明一个对象。如果想返回此对象,则需要在对象外面再嵌套一层小括如下:eval("({b:2})"); 

注意:使用eval来解析JSON格式字符串的时候,会将{}解析为代码块,而不是对象的字面量量

//1.在JSON格式的字符串前面拼接上 "var o ="

//2.把JSON格式的字符串使用()括起来,就不会将{}解析为代码块,而是表达式

eval函数使用方法

Eval函数的重要功能是实现对表达式的计算,能够处理表达式的长度在256个字符之内的运算式的计算。下面就来探讨一下Eval函数的具体使用方法。
Eval函数在JavaScript脚步语言中的使用:新建一网页文件“a.html”,在文件中输入如图所示代码并保存,打开该网页文件使脚本运行,则输入结果如图。

Eval函数在ExcelVBA编程中的使用:进入ExcelVBA编程环境,新建一模块,在模块中输入如图所示内容,点击运行,结果如图所示。

Eval函数在VBScript脚本语言中的使用: 在VB脚本语言中,Eval函数具有两层意思,一是实现计算表达的值,即eval()函数可将字符串转换为代码执行,并返回一个或多个值;二是运行指定的代码。实例如图所示。

Eval函数在PHP代码中的使用:eval() 函数把字符串按照 PHP 代码来计算。该字符串必须是合法的 PHP 代码,且必须以分号结尾。如果没有在代码字符串中调用 return 语句,则返回 NULL。如果代码中存在解析错误,则 eval() 函数返回 false。实例如图所示。

eval函数使用方法

Eval函数的重要功能是实现对表达式的计算,能够处理表达式的长度在256个字符之内的运算式的计算。下面就来探讨一下Eval函数的具体使用方法。
Eval函数在JavaScript脚步语言中的使用:新建一网页文件“a.html”,在文件中输入如图所示代码并保存,打开该网页文件使脚本运行,则输入结果如图。

Eval函数在ExcelVBA编程中的使用:进入ExcelVBA编程环境,新建一模块,在模块中输入如图所示内容,点击运行,结果如图所示。

Eval函数在VBScript脚本语言中的使用: 在VB脚本语言中,Eval函数具有两层意思,一是实现计算表达的值,即eval()函数可将字符串转换为代码执行,并返回一个或多个值;二是运行指定的代码。实例如图所示。

Eval函数在PHP代码中的使用:eval() 函数把字符串按照 PHP 代码来计算。该字符串必须是合法的 PHP 代码,且必须以分号结尾。如果没有在代码字符串中调用 return 语句,则返回 NULL。如果代码中存在解析错误,则 eval() 函数返回 false。实例如图所示。

JAVASCRIPT 里 EVAL的用法

eval顾名思义是执行语句的作用,在浏览器地址栏中输入:
javascript:eval(1+2)
浏览器将以写文档流方式输出3.
(有的系统删除了javascript:协议已注册的程序,则无法使用javascript:协议)

有时候遇到一个问题,比如说有10个radio元素,它们的ID都是以ye01,ye02,ye03来命名,那么在循环语句中你就很难动态的取到对象的句柄,有了eval可以先把相同的字符串和01,02..先合并起来再执行后面的语句,就可以取到对象的句柄了.
如:
<script defer>
var a="ye";
b="1818";
c=eval(a+b);
alert(c.value);
</script>
<input id="ye1818" value="你好" />

eval是执行的意思,你把变量赋值这些都放在里面是不合理的.

JAVASCRIPT 里 EVAL的用法

eval顾名思义是执行语句的作用,在浏览器地址栏中输入:
javascript:eval(1+2)
浏览器将以写文档流方式输出3.
(有的系统删除了javascript:协议已注册的程序,则无法使用javascript:协议)

有时候遇到一个问题,比如说有10个radio元素,它们的ID都是以ye01,ye02,ye03来命名,那么在循环语句中你就很难动态的取到对象的句柄,有了eval可以先把相同的字符串和01,02..先合并起来再执行后面的语句,就可以取到对象的句柄了.
如:
<script defer>
var a="ye";
b="1818";
c=eval(a+b);
alert(c.value);
</script>
<input id="ye1818" value="你好" />

eval是执行的意思,你把变量赋值这些都放在里面是不合理的.

javascript中eval是什么函数的作用和缺陷?

eval方法是在运行时对脚本进行解释执行,而普通的javascript会有一个预处理的过程。所以会有一些性能上的损失,但是通常通过一些手段能将这些性能损失降低到非常少。不至于谈虎色变。x0dx0ax0dx0a eval通常用在一些需要动态执行字符串,或将字符串转为javascript对象的场景,比如将json字符串转为javascript对象。x0dx0ax0dx0a至于eval容易被XSS攻击是属于想当然的说法吧,XSS攻击就是在你的页面上嵌入html或javascript代码,我觉得与是否使用eval方法没有什么关系。

有效提高JavaScript执行效率的几点知识_javascript技巧


为了提供新鲜、别致的用户体验,很多网站都会使用 JavaScript 来改善设计、验证表单、检查浏览器,以及Ajax请求,cookie操作等等,实现无刷新动态效果 。但是,要将大量内容在浏览器呈现,如果处理不好,网站性能将会急剧下降。所以我们有必要了解下,如何提高JavaScript的执行效率。

JavaScript 函数

在JavaScript 中,函数在使用前会预编译。尽管有些时候下可以使用字符串代替函数,但是每次执行这段JavaScript 代码时都会重新解析,影响性能。

1、eval例子
代码如下:
eval('output=(input * input)');
// 建议改成:
eval(new function() { output=(input * input)});


2、setTimeout例子

代码如下:
setTimeout("alert(1)", 1000);
// 建议改成:
setTimeout(function(){alert(1)}, 1000);


使用函数代替字符串作参数确保新方法中的代码能被 JavaScript 编译器优化。

JavaScript作用域

JavaScript作用域链中的每个作用域都包含几个变量。理解作用域链很重要,这样才能利用它。

代码如下:
var localVar = "global"; //全局变量

function test() {

var localVar = "local"; //局部变量

//局部变量
alert(localVar);

//全局变量
alert(this.localVar);

//查找document在局部变量找不到,就查找全局变量
var pageName = document.getElementById("pageName");
}

使用局部变量比使用全局变量快得多,因为在作用域链中越远,解析越慢。下图显示了作用域链结构:



如果代码中有 with 或 try-catch 语句,作用域链会更复杂,如下图:



JavaScript字符串

JavaScript中一个非常影响性能的函数是字符串连接,一般情况都是使用 + 号来实现拼接字符串。但是早期浏览器没有对这样的连接方式做优化,导致在连续创建和销毁字符串严重降低JavaScript执行效率。

代码如下:
var txt = "hello" + " " + "world";


建议改成:

代码如下:
var o = [];
o.push("hello");
o.push(" ");
o.push("world");
var txt = o.join();


我们再简单封装一下:

代码如下:
function StringBuffer(str) {
var arr = [];
arr.push(str || "");
this.append = function(str) {
arr.push(str);
return this;
};
this.toString = function() {
return arr.join("");
};
};


然后这样子调用:

代码如下:
var txt = new StringBuffer();
txt.append("Hello");
txt.append(" ");
txt.append("World");
alert(txt.toString());


JavaScript DOM操作

HTML Document Object Model (DOM) 定义了访问和操作 HTML 文档的标准方法。它将 HTML 文档表示成节点树,其中包含元素、属性和文本内容。通过使用 HTML DOM,JavaScript 能访问 HTML 文档中所有节点并操作它们。

DOM重绘

每次修改到页面的DOM对象,都涉及到DOM重绘,浏览器都会重新渲染页面。所以降低DOM对象的修改次数,可以有效地提高JavaScript 的性能。

代码如下:
for (var i = 0; i < 1000; i++ ) {
var elmt = document.createElement('p');
elmt.innerHTML = i;
document.body.appendChild(elmt);
}


建议改成:

代码如下:
var html = [];
for (var i = 0; i < 1000; i++) {
html.push('' + i + '
');
}
document.body.innerHTML = html.join('');


DOM访问

通过DOM可以访问到HTML文档中的每个节点。每次调用getElementById()、getElementsByTagName()等方法,都会重新查找并访问节点。所以将查找到的DOM节点缓存一下,也可以提高JavaScript 的性能。
代码如下:
document.getElementById("p2").style.color = "blue";
document.getElementById("p2").style.fontFamily = "Arial";
document.getElementById("p2").style.fontSize = "larger";


建议改成:

代码如下:
var elmt = document.getElementById("p2");
elmt.style.color = "blue";
elmt.style.fontFamily = "Arial";
elmt.style.fontSize = "larger";


DOM遍历

DOM遍历子元素通常都是按索引循环读取下一个子元素,在早期浏览器下这种读取方式执行效率很低,利用nextSibling方式可以提高js遍历DOM的效率。

代码如下:
var html = [];
var x = document.getElementsByTagName("p");//所有节点
for (var i = 0; i < x.length; i++) {
//todo
}


建议改成:

代码如下:
var html = [];
var x = document.getElementById("div");//上级节点
var node = x.firstChild;
while(node != null){
//todo
node = node.nextSibling;
}


JavaScript 内存释放

在web应用中,随着DOM对象数量的增加,内存消耗会越来越大。所以应当及时释放对象的引用,让浏览器能够回收这些内存。

释放DOM占用的内存

代码如下:
document.getElementById("test").innerHTML = "";


将DOM元素的innerHTML设置为空字符串,可以释放其子元素占用的内存。

释放javascript对象

代码如下:
//对象:
obj = null
//对象属性:
delete obj.property
//数组元素:
arr.splice(0,3);//删除前3个元素

有效提高JavaScript执行效率的几点知识_javascript技巧


为了提供新鲜、别致的用户体验,很多网站都会使用 JavaScript 来改善设计、验证表单、检查浏览器,以及Ajax请求,cookie操作等等,实现无刷新动态效果 。但是,要将大量内容在浏览器呈现,如果处理不好,网站性能将会急剧下降。所以我们有必要了解下,如何提高JavaScript的执行效率。

JavaScript 函数

在JavaScript 中,函数在使用前会预编译。尽管有些时候下可以使用字符串代替函数,但是每次执行这段JavaScript 代码时都会重新解析,影响性能。

1、eval例子
代码如下:
eval('output=(input * input)');
// 建议改成:
eval(new function() { output=(input * input)});


2、setTimeout例子

代码如下:
setTimeout("alert(1)", 1000);
// 建议改成:
setTimeout(function(){alert(1)}, 1000);


使用函数代替字符串作参数确保新方法中的代码能被 JavaScript 编译器优化。

JavaScript作用域

JavaScript作用域链中的每个作用域都包含几个变量。理解作用域链很重要,这样才能利用它。

代码如下:
var localVar = "global"; //全局变量

function test() {

var localVar = "local"; //局部变量

//局部变量
alert(localVar);

//全局变量
alert(this.localVar);

//查找document在局部变量找不到,就查找全局变量
var pageName = document.getElementById("pageName");
}

使用局部变量比使用全局变量快得多,因为在作用域链中越远,解析越慢。下图显示了作用域链结构:



如果代码中有 with 或 try-catch 语句,作用域链会更复杂,如下图:



JavaScript字符串

JavaScript中一个非常影响性能的函数是字符串连接,一般情况都是使用 + 号来实现拼接字符串。但是早期浏览器没有对这样的连接方式做优化,导致在连续创建和销毁字符串严重降低JavaScript执行效率。

代码如下:
var txt = "hello" + " " + "world";


建议改成:

代码如下:
var o = [];
o.push("hello");
o.push(" ");
o.push("world");
var txt = o.join();


我们再简单封装一下:

代码如下:
function StringBuffer(str) {
var arr = [];
arr.push(str || "");
this.append = function(str) {
arr.push(str);
return this;
};
this.toString = function() {
return arr.join("");
};
};


然后这样子调用:

代码如下:
var txt = new StringBuffer();
txt.append("Hello");
txt.append(" ");
txt.append("World");
alert(txt.toString());


JavaScript DOM操作

HTML Document Object Model (DOM) 定义了访问和操作 HTML 文档的标准方法。它将 HTML 文档表示成节点树,其中包含元素、属性和文本内容。通过使用 HTML DOM,JavaScript 能访问 HTML 文档中所有节点并操作它们。

DOM重绘

每次修改到页面的DOM对象,都涉及到DOM重绘,浏览器都会重新渲染页面。所以降低DOM对象的修改次数,可以有效地提高JavaScript 的性能。

代码如下:
for (var i = 0; i < 1000; i++ ) {
var elmt = document.createElement('p');
elmt.innerHTML = i;
document.body.appendChild(elmt);
}


建议改成:

代码如下:
var html = [];
for (var i = 0; i < 1000; i++) {
html.push('' + i + '
');
}
document.body.innerHTML = html.join('');


DOM访问

通过DOM可以访问到HTML文档中的每个节点。每次调用getElementById()、getElementsByTagName()等方法,都会重新查找并访问节点。所以将查找到的DOM节点缓存一下,也可以提高JavaScript 的性能。
代码如下:
document.getElementById("p2").style.color = "blue";
document.getElementById("p2").style.fontFamily = "Arial";
document.getElementById("p2").style.fontSize = "larger";


建议改成:

代码如下:
var elmt = document.getElementById("p2");
elmt.style.color = "blue";
elmt.style.fontFamily = "Arial";
elmt.style.fontSize = "larger";


DOM遍历

DOM遍历子元素通常都是按索引循环读取下一个子元素,在早期浏览器下这种读取方式执行效率很低,利用nextSibling方式可以提高js遍历DOM的效率。

代码如下:
var html = [];
var x = document.getElementsByTagName("p");//所有节点
for (var i = 0; i < x.length; i++) {
//todo
}


建议改成:

代码如下:
var html = [];
var x = document.getElementById("div");//上级节点
var node = x.firstChild;
while(node != null){
//todo
node = node.nextSibling;
}


JavaScript 内存释放

在web应用中,随着DOM对象数量的增加,内存消耗会越来越大。所以应当及时释放对象的引用,让浏览器能够回收这些内存。

释放DOM占用的内存

代码如下:
document.getElementById("test").innerHTML = "";


将DOM元素的innerHTML设置为空字符串,可以释放其子元素占用的内存。

释放javascript对象

代码如下:
//对象:
obj = null
//对象属性:
delete obj.property
//数组元素:
arr.splice(0,3);//删除前3个元素

js,eval函数。

开始我猜测第一个eval作用等同于getElementById,即通过一个id名获取DOM对象
于是我写了个测试方法,代码如下
<div id="left" onclick="ev('left')">haha</div>
<script type="text/javascript">
function ev(str){
alert(eval(str).innerHTML);
}
</script>
语句意思是点击对象,弹出含有id为left的对象的内部源码,经测试,结果正确.
推论,eval不但可以执行js语句,也可以用作获取对象的方法,他是否只能用作通过id获取对象我没做测试.期待你自行挖掘.

这样,对于你的源码就很好解释了,left_n就是获取的对象,left_n.style.display控制对象的显示与隐藏.

js,eval函数。

开始我猜测第一个eval作用等同于getElementById,即通过一个id名获取DOM对象
于是我写了个测试方法,代码如下
<div id="left" onclick="ev('left')">haha</div>
<script type="text/javascript">
function ev(str){
alert(eval(str).innerHTML);
}
</script>
语句意思是点击对象,弹出含有id为left的对象的内部源码,经测试,结果正确.
推论,eval不但可以执行js语句,也可以用作获取对象的方法,他是否只能用作通过id获取对象我没做测试.期待你自行挖掘.

这样,对于你的源码就很好解释了,left_n就是获取的对象,left_n.style.display控制对象的显示与隐藏.

javascript的eval函数的优点是什么?只知道是将括号内的字符串当JS语句...

eval可以将字符串生成语句执行,一般执行动态的js语句。
eval的使用场合:有时候我们预先不知道要执行什么语句,只有当条件和参数给时才知道执行什么语句,这时候eval就派上用场了。
Eval 函数
功能:先解释Javascript代码,然后在执行它
用法:Eval(codeString)
codeString是包含有Javascript语句的字符串,在eval之后使用Javascript引擎编译。

举个例子:
function output(a,b)
{
var tmpa,tmpb;
tmpa=eval("document.all."+a+".value");
//这里动态执行js 相等于tmpa=document.getElementById(a).value;
tmpb=eval("document.all."+b+".value");
//这里动态执行js
//这里动态执行js 相等于tmpb=document.getElementById(b).value;
document.write(tmpa+tmpb);
}
output('input1','input2');

例子二:
function tophide(id) //id indicates menu
{
if (top.topframeset.rows == "31,*")
{
top.topframeset.rows = "86,*";
eval(id + "_icon.src="/imgs/collapse_up.gif'"); //这里动态执行js

eval(id + "_icon.alt='Collapse The Head'"); //这里动态执行js
head.style.display = "block"
}
else
{
top.topframeset.rows = "31,*";
eval(id + "_icon.src="/imgs/collapse_down.gif'");//这里动态执行js
eval(id + "_icon.alt='Expand The Head'");//这里动态执行js
head.style.display = "none"
}
}

javascript的eval函数的优点是什么?只知道是将括号内的字符串当JS语句...

eval可以将字符串生成语句执行,一般执行动态的js语句。
eval的使用场合:有时候我们预先不知道要执行什么语句,只有当条件和参数给时才知道执行什么语句,这时候eval就派上用场了。
Eval 函数
功能:先解释Javascript代码,然后在执行它
用法:Eval(codeString)
codeString是包含有Javascript语句的字符串,在eval之后使用Javascript引擎编译。

举个例子:
function output(a,b)
{
var tmpa,tmpb;
tmpa=eval("document.all."+a+".value");
//这里动态执行js 相等于tmpa=document.getElementById(a).value;
tmpb=eval("document.all."+b+".value");
//这里动态执行js
//这里动态执行js 相等于tmpb=document.getElementById(b).value;
document.write(tmpa+tmpb);
}
output('input1','input2');

例子二:
function tophide(id) //id indicates menu
{
if (top.topframeset.rows == "31,*")
{
top.topframeset.rows = "86,*";
eval(id + "_icon.src="/imgs/collapse_up.gif'"); //这里动态执行js

eval(id + "_icon.alt='Collapse The Head'"); //这里动态执行js
head.style.display = "block"
}
else
{
top.topframeset.rows = "31,*";
eval(id + "_icon.src="/imgs/collapse_down.gif'");//这里动态执行js
eval(id + "_icon.alt='Expand The Head'");//这里动态执行js
head.style.display = "none"
}
}

eval()的JavaScript

eval() 函数可将字符串转换为代码执行,并返回一个或多个值
函数原型为:
返回值 = eval( codeString )
函数说明:
如果eval函数在执行时遇到错误,则抛出异常给调用者.
类似的函数是loadcode ,loadcode并不立即执行代码,而是返回一个函数对象.
并且loadcode支持路径参数,eval并不支持. eval并不支持代码中的return语句,而是将代码作为表达式直接计算出结果.
实例:
var d = eval("({name:'chentong'})")
alert(d.name);

eval()的JavaScript

eval() 函数可将字符串转换为代码执行,并返回一个或多个值
函数原型为:
返回值 = eval( codeString )
函数说明:
如果eval函数在执行时遇到错误,则抛出异常给调用者.
类似的函数是loadcode ,loadcode并不立即执行代码,而是返回一个函数对象.
并且loadcode支持路径参数,eval并不支持. eval并不支持代码中的return语句,而是将代码作为表达式直接计算出结果.
实例:
var d = eval("({name:'chentong'})")
alert(d.name);

Javascript新手求问eval函数

不加的话,a就是一个字符

Javascript新手求问eval函数

不加的话,a就是一个字符

javaScript的一道题目,请高手看看.

Javascript中eval函数的用法
JavaScript有许多小窍门来使编程更加容易。其中之一就是eval()函数,这个函数可以把一个字符串当作一个JavaScript表达式一样去执行它。以下是它的说明
Eval 函数
功能:先解释Javascript代码,然后在执行它
用法:Eval(codeString)
codeString是包含有Javascript语句的字符串,在eval之后使用Javascript引擎编译。

举个小例子:

var the_unevaled_answer = "2 + 3";
var the_evaled_answer = eval("2 + 3");
alert("the un-evaled answer is " + the_unevaled_answer + " and the evaled answer is " + the_evaled_answer);

如果你运行这段eval程序, 你将会看到在JavaScript里字符串"2 + 3"实际上被执行了。所以当你把the_evaled_answer的值设成 eval("2 + 3")时, JavaScript将会明白并把2和3的和返回给the_evaled_answer。
这个看起来似乎有点傻,其实可以做出很有趣的事。比如使用eval你可以根据用户的输入直接创建函数。这可以使程序根据时间或用户输入的不同而使程序本身发生变化,通过举一反三,你可以获得惊人的效果。

javaScript的一道题目,请高手看看.

Javascript中eval函数的用法
JavaScript有许多小窍门来使编程更加容易。其中之一就是eval()函数,这个函数可以把一个字符串当作一个JavaScript表达式一样去执行它。以下是它的说明
Eval 函数
功能:先解释Javascript代码,然后在执行它
用法:Eval(codeString)
codeString是包含有Javascript语句的字符串,在eval之后使用Javascript引擎编译。

举个小例子:

var the_unevaled_answer = "2 + 3";
var the_evaled_answer = eval("2 + 3");
alert("the un-evaled answer is " + the_unevaled_answer + " and the evaled answer is " + the_evaled_answer);

如果你运行这段eval程序, 你将会看到在JavaScript里字符串"2 + 3"实际上被执行了。所以当你把the_evaled_answer的值设成 eval("2 + 3")时, JavaScript将会明白并把2和3的和返回给the_evaled_answer。
这个看起来似乎有点傻,其实可以做出很有趣的事。比如使用eval你可以根据用户的输入直接创建函数。这可以使程序根据时间或用户输入的不同而使程序本身发生变化,通过举一反三,你可以获得惊人的效果。

本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。

上一篇:

下一篇:

热门图文

  • 送周子华南归的作者 送周子华南归的作者是什么]

    《送周子华南归》陆文圭作者:陆文圭。《送周子华南归》作者:陆文圭。年代:元代。别称:墙东先生。字号:字子方。出生地:江阴(今属江苏)人。出生时间:1252。去世时间:1336。主要作品:《辛卯二月记异》《新移瑞香不得雨有叹》《月·青天一片玉》《挽吉州刘总管》《为刘君符赋乐山诗》等。我们为您从以下几个方面提供送周子华南归的详细介绍。一、《送周子华南归》的全文 点此查看《送周子华南归》的详细内容。此日与君别,重逢未有期。衰年行欲尽,近事或难知。浩荡风云会,萧条草木悲。三吴多俊杰,试与问安危。二、《送周子华南归》陆文圭其他诗词《赤壁图·公瑾子瞻二龙》、《题戴嵩牛图》、《雅宜山在城西五十里有德庵在其下穹寄山福寺》、《送仲华葛兄·蓉城诸葛何绵绵》、《送徐舜辑·彦霖父子魏公客》。相同朝代的诗歌;

  • 次韵叶硕夫南归见贻的全文

    《次韵叶硕夫南归见贻》李弥逊全文:未挂丹题雁塔中,重来溪上觅筠翁。相期老眼横遥碧,莫着征衫走软红。得失漫嗟蝉翼重,才名合见马群空。三年小度惊人手,未信朱衣也不公。《次韵叶硕夫南归见贻》全文:未挂丹题雁塔中,重来溪上觅筠翁。相期老眼横遥碧,莫着征衫走软红。得失漫嗟蝉翼重,才名合见马群空。三年小度惊人手,未信朱衣也不公。作者:李弥逊。年代:宋代。我们为您从以下几个方面提供次韵叶硕夫南归见贻的详细介绍。一、《次韵叶硕夫南归见贻》的全文 点此查看《次韵叶硕夫南归见贻》的详细内容。未挂丹题雁塔中,重来溪上觅筠翁。相期老眼横遥碧,莫着征衫走软红。得失漫嗟蝉翼重,才名合见马群空。三年小度惊人手,未信朱衣也不公。

  • 送周子华南归的作者是什么

    《送周子华南归》陆文圭作者:陆文圭。《送周子华南归》作者:陆文圭。年代:元代。别称:墙东先生。字号:字子方。出生地:江阴(今属江苏)人。出生时间:1252。去世时间:1336。主要作品:《辛卯二月记异》《新移瑞香不得雨有叹》《月·青天一片玉》《挽吉州刘总管》《为刘君符赋乐山诗》等。我们为您从以下几个方面提供送周子华南归的详细介绍。一、《送周子华南归》的全文 点此查看《送周子华南归》的详细内容。此日与君别,重逢未有期。衰年行欲尽,近事或难知。浩荡风云会,萧条草木悲。三吴多俊杰,试与问安危。二、《送周子华南归》陆文圭其他诗词《赤壁图·公瑾子瞻二龙》、《题戴嵩牛图》、《雅宜山在城西五十里有德庵在其下穹寄山福寺》、《送仲华葛兄·蓉城诸葛何绵绵》、《送徐舜辑·彦霖父子魏公客》。相同朝代的诗歌;

  • 次韵叶硕夫南归见贻全文

    《次韵叶硕夫南归见贻》李弥逊全文:未挂丹题雁塔中,重来溪上觅筠翁。相期老眼横遥碧,莫着征衫走软红。得失漫嗟蝉翼重,才名合见马群空。三年小度惊人手,未信朱衣也不公。《次韵叶硕夫南归见贻》全文:未挂丹题雁塔中,重来溪上觅筠翁。相期老眼横遥碧,莫着征衫走软红。得失漫嗟蝉翼重,才名合见马群空。三年小度惊人手,未信朱衣也不公。作者:李弥逊。年代:宋代。我们为您从以下几个方面提供次韵叶硕夫南归见贻的详细介绍。一、《次韵叶硕夫南归见贻》的全文 点此查看《次韵叶硕夫南归见贻》的详细内容。未挂丹题雁塔中,重来溪上觅筠翁。相期老眼横遥碧,莫着征衫走软红。得失漫嗟蝉翼重,才名合见马群空。三年小度惊人手,未信朱衣也不公。

  • 送周子华南归的作者

    《送周子华南归》陆文圭作者:陆文圭。《送周子华南归》作者:陆文圭。年代:元代。别称:墙东先生。字号:字子方。出生地:江阴(今属江苏)人。出生时间:1252。去世时间:1336。主要作品:《辛卯二月记异》《新移瑞香不得雨有叹》《月·青天一片玉》《挽吉州刘总管》《为刘君符赋乐山诗》等。我们为您从以下几个方面提供送周子华南归的详细介绍。一、《送周子华南归》的全文 点此查看《送周子华南归》的详细内容。此日与君别,重逢未有期。衰年行欲尽,近事或难知。浩荡风云会,萧条草木悲。三吴多俊杰,试与问安危。二、《送周子华南归》陆文圭其他诗词《赤壁图·公瑾子瞻二龙》、《题戴嵩牛图》、《雅宜山在城西五十里有德庵在其下穹寄山福寺》、《送仲华葛兄·蓉城诸葛何绵绵》、《送徐舜辑·彦霖父子魏公客》。相同朝代的诗歌;

Top