## `eval()`
只用于解析序列化串 (如: 解析 RPC 響應)
`eval()` 會讓程序執行的比較混亂, 當 `eval()` 里面包含用戶輸入的話就更加危險.
可以用其他更佳的, 更清晰, 更安全的方式寫你的代碼, 所以一般情況下請不要使用 eval().
當碰到一些需要解析序列化串的情況下(如, 計算 RPC 響應), 使用 `eval` 很容易實現.
解析序列化串是指將字節流轉換成內存中的數據結構. 比如, 你可能會將一個對象輸出成文件形式:
```
users = [
{
name: 'Eric',
id: 37824,
email: 'jellyvore@myway.com'
},
{
name: 'xtof',
id: 31337,
email: 'b4d455h4x0r@google.com'
},
...
];
```
很簡單地調用 `eval` 后, 把表示成文件的數據讀取回內存中.
類似的, `eval()` 對 RPC 響應值進行解碼. 例如, 你在使用 `XMLHttpRequest` 發出一個 RPC 請求后, 通過 eval () 將服務端的響應文本轉成 JavaScript 對象:
```
var userOnline = false;
var user = 'nusrat';
var xmlhttp = new XMLHttpRequest();
xmlhttp.open('GET', 'http://chat.google.com/isUserOnline?user=' + user, false);
xmlhttp.send('');
// Server returns:
// userOnline = true;
if (xmlhttp.status == 200) {
eval(xmlhttp.responseText);
}
// userOnline is now true.
```