eval()

最后更新于:2022-04-01 22:24:44

## `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. ```
';