因此,可以说我在JavaScript中定义的字符串:执行字符串作为一块的HTML/JavaScript代码
var s = "function();"
我可以执行代码,如果我知道这个字符串的值?
如果是,那么我可以在一个字符串内有多个命令吗?例如:
var k = "function(); a = a + 1;"
在此先感谢
因此,可以说我在JavaScript中定义的字符串:执行字符串作为一块的HTML/JavaScript代码
var s = "function();"
我可以执行代码,如果我知道这个字符串的值?
如果是,那么我可以在一个字符串内有多个命令吗?例如:
var k = "function(); a = a + 1;"
在此先感谢
您可以使用eval
,并且会执行多条语句。 但是,使用eval
通常是一个坏主意。在大多数情况下,您可能可以完成任何您试图做的事情,而不需要eval
。
eval
如果与用户提供的代码一起使用(如来自表单或URL的内容),则可能会相当危险。它打开你达Cross-Site Scripting (XSS) attacks。只是避免它是最好的行动方式,因为this answer提到,在将其输入eval
之前对输入进行消毒不是直截了当,而且很容易出错。
使用eval
时出现的其他几个不太重要的问题是它使代码难以调试,而且速度很慢。如果浏览器不像其他代码那样对其进行优化和/或缓存,它也很难实现。
更新
我很惊讶,我忘了提及这个,当我最初回答了这一点,但明确地使用eval
说法是不是唯一的方法eval
在JavaScript调用。通过code instead of a function reference至setTimeout
或setInterval
将隐式评估该代码。
// This evals:
setTimeout("doSomething()", 1000);
// This does not eval:
setTimeout(doSomething, 1000); // also shorter :)
虽然不完全一样eval
,则Function
constructor也有similar security concerns associated with it。
let xss = 'alert("XSS")';
// whatever is in the string passed to Function
// becomes the body of the function
let doSomething = new Function(xss);
document.querySelector('button').addEventListener('click', doSomething, false);
<button>Do Something</button>
正如eval
,应注意当使用字符串作为输入setTimeout
,setInterval
或Function
构造,特别是当用户输入将被传递到上当。
另见:
您可以使用eval()
来评估/执行JavaScript代码/表达式:
var k = "var a = 0; alert(a); a = a + 1; alert(a);"
eval(k);
的eval
功能将评估一个传递给它的字符串。它是慢。这是因为要评估的代码必须在现场解析,因此需要一些计算资源。
使用'的eval()'... [检查这里](https://developer.mozilla.org/en-US/docs/We B/JavaScript的/参考/ Global_Objects/EVAL)... –