首先理解一下下面的表達式:
expression(eval(document.documentElement.scrollTop+document.documentElement.clientHeight-this.offsetHeight-
(parseInt(this.currentStyle.marginTop,10)||0)-(parseInt(this.currentStyle.marginBottom,10)||0)));
這個是css的行為--expression,目的系快捷在css里面使用js定義一個參數,這段代碼最后輸出的是一個數字,eval是js里面的一個函數,功能是計算某個字符串,並執行其中的的js代碼;document.documentElement.scrollTop+document.documentElement.clientHeight計算當前網頁可見區域的高度;this.offsetHeight該類指定的容器整個高度(包括溢出部分);parseInt(this.currentStyle.marginTop,10)這個函數是解析一個字符串,並返回一個整數,逗號后面個10可以解析為以10進制的形式輸出逗號前面的數字,這個10可以表現為2,8,10,16,32;||0是或0的意思,即是前面的數字返回非0或負數時使用0這個數字輸出。后面也是同理的。
eval() 函數
可計算某個字符串,並執行其中的的 JavaScript 代碼。
語法
eval(string) 參數
描述
string 必需。要計算的字符串,其中含有要計算的 JavaScript 表達式或要執行的語句。
返回值
通過計算 string 得到的值(如果有的話)。
說明
該方法只接受原始字符串作為參數,如果 string 參數不是原始字符串,那么該方法將不作任何改變地返回。因此請不要為 eval() 函數傳遞 String 對象來作為參數。 如果試圖覆蓋 eval 屬性或把 eval() 方法賦予另一個屬性,並通過該屬性調用它,則 ECMAScript 實現允許拋出一個 EvalError 異常。
拋出
如果參數中沒有合法的表達式和語句,則拋出 SyntaxError 異常。
如果非法調用 eval(),則拋出 EvalError 異常。
如果傳遞給 eval() 的 Javascript 代碼生成了一個異常,eval() 將把該異常傳遞給調用者。
提示和注釋
提示:雖然 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>
輸出:
00
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);
}