js高階-eval()函式
阿新 • • 發佈:2022-01-02
1.eval()函式定義
它是一個函式,只接收一個字串型別的引數
eval(string)
如果輸入的引數是js程式碼,會被函式直接解析執行
如果輸入的引數是普通字串,則返回該字串
例項如下
1.1 輸入string為js程式碼
eval("var a =1;var b=4; alert(a+b)");
執行alter語句顯示為5
可以把eval()中的string類比成html檔案中的<script><script/>包裹的內容,符合js邏輯的語句在此解析並執行
1.2普通字串
eval('hello');
返回字串hello
1.3解析json資料
會報錯
原因在於:
json本身具有大括號{},eval()在解析時會識別為js語句塊的開始和結束,所以顯示無效語法報錯
解決方法:
強制的將{}轉換成非js語句塊,那麼就需要加上圓括號(json),它的作用在於將括號內的表示式(expression)轉換為物件,而不是語句(statement)來執行
alert(eval("{}"); // return undefined //物件字面量不進行()轉換,會被識別為語句塊,空語句塊 alert(eval("({})");// return object[Object] //進行()轉換,則識別為一個空物件
所以要給json變數加上(),因為是變數新增括號,所以用字串加法,需要加""
var josnobj = eval("("+jsonstr+")"); //實際上就解析的(jsonstr)