標籤: 暫無標籤

eval函數允許動態執行 JScript 源代碼。傳遞給 eval 方法的代碼執行時所在的上下文和調用 eval 方法時的上下文一樣。請注意,在 eval 語句中定義的新變數或類型對於封閉程序是不可見的。

1 eval -1.Eval方法

  參數 :

  codeString

  必選。包含有效 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 Apr 8 00:00:00 PDT 1971

2 eval -2.在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

3 eval -3.Eval方法實例

例子 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>

  輸出:200427

例子 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); }

4 eval -4.VBS中的 eval()

  讓我們來比較一下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()是開平方函數 )

  很神奇啊!

5 eval -PHP中的eval()

  eval — 把字元串作為PHP代碼執行

  說明

  mixedeval ( 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 #1 eval()例子 - 簡單的文本合併

  <?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),整個腳本會退出。

上一篇[好撒瑪利亞人]    下一篇 [Eterm]

相關評論

同義詞:暫無同義詞