基本參數
codeString(編程函式)
必選。包含有效 JScript 代碼的字元串。 //Jscript
override
可選項。確定要套用於 codeString 中代碼的安全許可權的字元串。
eval 函式允許動態執行 JScript原始碼。
傳遞給 eval 方法的代碼執行時所在的上下文和調用 eval 方法時的上下文一樣。請注意,在 eval 語句中定義的新變數或類型對於封閉程式是不可見的。
除非將字元串“unsafe”傳遞為第二個參數,否則,傳遞至 eval 方法的代碼在受限安全上下文中執行。受限安全上下文禁止訪問系統資源,如檔案系統、網路或用戶界面。如果代碼試圖訪問這些資源,則會產生安全異常。
當 eval 的第二個參數為字元串“unsafe”時,傳遞給 eval 方法的代碼在調用代碼所在的安全上下文中執行。第二個參數是區分大小寫的,因此,字元串“Unsafe”或“UnSAfE”不會重寫受限安全上下文。
示例:
例如,下面的代碼將變數mydate 初始化為測試日期或當前日期,這取決於變數 doTest 的值:
var doTest : boolean = true;
var dateFn : String;
if(doTest)
dateFn = "Date(1971,3,8)";
else
dateFn = "Date()";
var mydate : Date;
eval("mydate = new "+dateFn+";");
print(mydate);
該程式的輸出為:Thu Mar 8 00:00:00 PDT 1971
用法
例子 1
在本例中,我們將在幾個字元串上運用 eval(),並看看返回的結果:
<script type="text/javascript">
eval("x=10;y=20;document.write(x*y)");
document.write(eval("2+2"));
var x=10;
document.write(eval(x+17));
</script>
輸出:200
4
27
例子 2
看一下在其他情況中,eval() 返回的結果:
eval("2+3") // 返回 5
var myeval = eval; // 可能會拋出 EvalError 異常
myeval("2+3"); // 可能會拋出 EvalError 異常
可以使用下面這段代碼來檢測 eval() 的參數是否合法:
try { alert("Result:" + eval(prompt("Enter an expression:",""))); }catch(exception) { alert(exception);
套用
ActionScript 中
eval 函式
eval(expression:Object) : Object
eval(expression:String) : Object
按照名稱訪問變數、屬性、對象或影片剪輯。如果表達式是變數或屬性,則返回該變數或屬
性的值。如果表達式是對象或影片剪輯,則返回對該對象或影片剪輯的引用。如果無法找到
表達式中列舉的元素,則返回 undefined。
在 Flash 4 中,eval() 用於模擬數組;在 Flash 5 或更高版本中,您應該使用 Array 類來模
擬數組。
在 Flash 4 中,您還可以使用 eval() 動態地設定和檢索變數值或實例名稱。然而,也可以
使用數組訪問運算符 ([]) 來實現這一點。
在 Flash5 或更高版本中,不能使用 eval() 動態設定和檢索變數值或實例名稱,因為不能在
等式的左側使用 eval()。例如,將代碼
eval ("var" + i) = "first";
替換為:
this["var"+i] = "first"
或者替換為:
set ("var" + i, "first");
可用性:Flash Player 5 ; ActionScript 1.0
VBS中
讓我們來比較一下eval的威力
第一種情況,不用eval:
dim x
x=Inputbox("")
msgbox x
輸入3+2 ,出來還是3+2
第二種情況,用上eval:
dim x
x=Inputbox("")
msgbox eval(x)
輸入3+2,會出來5
輸入6*9,會出來54
輸入sqr(49),會出來7
( sqr()是開平方函式 )
很神奇啊!
PHP中
eval — 把字元串作為PHP代碼執行
說明
mixed eval( string $code_str )
把字元串 code_str作為PHP代碼執行。 除了其他,該函式能夠執行儲存於資料庫文本欄位內的PHP代碼。
使用 eval()時需注意幾個因素:注意字元必須是有效的PHP代碼,包括結尾的分號,以不至於解釋器在 eval()之後退出。並且正確地轉義 code_str中的東西。你可以使用一個PHP閉合標籤來混合輸出HTML和PHP代碼。
同時需注意eval中的變數會被保留在之後的主腳本中。
參數
code_str需要被執行的字元串 code_str不能包含 PHP Opening tags。
return語句會立即中止當前字元串的執行。
返回值
eval()返回 NULL,除非在執行的代碼中 return了一個值,函式返回該值。 如果在執行的代碼中有一個解析錯誤, eval()返回 FALSE,之後的代碼將正常執行。無法使用 set_error_handler() 捕獲 eval()中的解析錯誤。
範例
Example #1eval()例子 - 簡單的文本合併
<?php
$string = 'cup';
$name = 'coffee';
$str = 'This is a $string with my $name in it.';
echo $str. "\n";
eval("\$str = \"$str\";");
echo $str. "\n";
?>
以上例程會輸出:
This is a $string with my $name in it.This is a cup with my coffee in it.
Note: 因為是一個語言構造器而不是一個函式,不能被 可變函式 調用。
Tip和直接將結果輸出到瀏覽器一樣,可使用輸出控制函式來捕獲當前函式的輸出,然後(例如)保存到一個 string 中。
Note:
如果在執行的代碼中產生了一個致命的錯誤(fatal error),整個腳本會退出。
Linux 中
shell中的eval命令將會首先掃描命令行進行所有的替換,然後再執行命令。該命令使用於那些一次掃描無法實現其功能的變數。該命令對變數進行兩次掃描。這些需要進行兩次掃描的變數有時候被稱為複雜變數。
例如
$:cat ext
count=3
cmd=echo
cmd="$cmd \$$count"
ext 11 22 33
此時cmd=" echo $3"
eval $cmd 等價於 "echo 33 "