eval[Javascrip函式]

eval[Javascrip函式]
eval[Javascrip函式]
更多義項 ▼ 收起列表 ▲

eval是Javascript內置函式,用於計算字元串表達式的值。例如eval("2+3") 返回的是5。

基本參數

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 "

相關詞條

相關搜尋

熱門詞條

聯絡我們