2011-07-01 71 views
1
<html> 
<body> 
<script type="text/javascript"> 
document.write("<br />" + eval("2+2")); 
</script> 
</body> 
</html> 

這給了我爲4JavaScript中的eval函數有什麼用?

輸出如果我刪除eval函數和運行同樣的事情知道它給了我同樣的輸出,4

<html> 
<body> 
<script type="text/javascript"> 
document.write("<br />" + (2+2); 
</script> 
</body> 
</html> 

回答

0

eval()接受一個字符串,並評估它,如果它是一個也沒有。 (2+2)不是一個字符串。

console.log (typeof (2+2)); // returns number 

console.log (typeof "2+2"); // returns string 
1

您的觀察是非常正確的。 eval()沒有別的,只能到evaluate使用Javascript代碼。因此結果是相同的。然而,eval()的使用是相當皺眉。這是出於安全和性能原因。例如,一個JavaScript引擎(至少他們中的大多數)總是試圖在訪問性能方面優化你的代碼。如果不深入這裏,訪問相當深的範圍鏈屬性代價很高,因此引擎將使用散列查找表優化訪問。通過調用eval(),此機制不能再使用,因此查找屬性會更慢。

這只是一個例子,爲什麼不推薦使用eval(),還有更多。

2

評估和演示,您可以執行存儲在變量命令:

<script type="text/javascript"> 
var cmd = "2+2"; 
document.write("<br />" + eval(cmd)); 
</script> 
+0

它不一定需要被存儲在一個變量。 – jAndy

+0

同意,但想說明eval()的好處 –

1

eval嘗試,就好像它是一個腳本執行 - 在你的例子(2+2)不是一個字符串,因此它沒有任何效果。

此外,eval is evil ...

1

隨着「EVAL」,你可以做這樣的事情:

<html> 
<body> 
<script type="text/javascript"> 
    var command = prompt('input command'); 
    eval(command); 
</script> 
</body> 
</html> 
相關問題