js 字符串對象名使用

     非常多的時候我們得到的可能是對象的字符串形式,這時候你可能會想到eval:

定義和用法

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>

輸出:

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

如上是w3school的示例,更常用到的可能是從服務器端獲取的json字符串,所以我們一般會這樣:

var jsonObj = eval("(" + json + ")");

爲什麼要加括號呢?原因是加上圓括號的目的是迫使eval函數在處理JavaScript代碼的時候強制將括號內的表達式(expression)轉化爲對象,而不是作爲語句(statement)來執行。例如對象字面量{},如若不加外層的括號,那麼eval會將大括號識別爲JavaScript代碼塊的開始和結束標記,那麼{}將會被認爲是執行了一句空語句。

alert(eval("{}"); // return undefined 

alert(eval("({})");// return object[Object]

eval可以用來解析任何javascrtipt代碼,因此就存在一個很大的安全隱患。有些人可以注入一些與預期的json數據結構相符的JavaScript代碼,而該代碼傳入eval()之後就可以被執行。所以應該儘量避免少用eval,比如函數等對象我們可以用另一種方式替代:


window['alert']('test');


[]和.運算的功能是一樣,[]支持傳入字符串


發佈了260 篇原創文章 · 獲贊 10 · 訪問量 45萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章