javascrip执行字符串里面的函数

简介: javascrip执行字符串里面的函数

var aa='console.log(123)';

有什么方法可以让字符串里面的函数执行?

不建议使用eval()的原因无非两点:

  1. 性能不佳
  2. 安全性
var aa='console.log(123)';
eval(aa)

最重要的一点是安全性,大家都知道,如果能执行字符串里的代码,那么凡是有输入的地方,那都有可能发生XSS攻击等。

使用Function构造会比直接使用eval好一些 Function构造的方法,在 严格模式 下,并没有生效。

var str = 'console.log(123)';
var fn = Function(str);
fn();

eval这个关键字不建议使用,个中原因在秘密花园有解释。

不过花园中只一再提到不要使用eval,并且给了以下示范:

var foo = 1;
function test() {
  var foo = 2;
  eval('foo = 3');
   return foo;
}
test(); // 3
foo; // 1

但却没有给出解决方案,推荐做法,就是通过构造函数为‘期望执行的代码’创建新的函数作用域,尽可能减少对当前作用域的影响/污染

var foo = 1;
function test() {
  var foo = 2;
  (Function('foo = 3'))();//
    return foo;
 }
test(); // 2
foo; // 1


相关文章
|
6月前
|
前端开发 算法 JavaScript
JavaScrip实现一个睡眠函数
JavaScrip实现一个睡眠函数
66 0
|
JavaScript
JS输出、获取元素,变量,事件组成,流程控制,对象,函数
JS输出、获取元素,变量,事件组成,流程控制,对象,函数
|
6月前
|
JavaScript 前端开发
JavaScript 判断字符串是否包含某个字符串
JavaScript 判断字符串是否包含某个字符串
|
JavaScript 前端开发 安全
在javascript中如何将字符串转成变量或可执行的代码?
有这样一个需求:当前作用域内有未知的一些变量,其中一个函数中可以拿到某个变量名字符串,怎么能在函数内通过传进来的字符串取到作用域链中的变量值
187 0
|
JavaScript 前端开发
javascript封装函数:substr函数实现自动截取长度超出限制字数的解决方案
javascript封装函数:substr函数实现自动截取长度超出限制字数的解决方案
102 0
|
SQL 开发框架 JavaScript
JavaScript基础-replace方法的第二个参数
JavaScript基础-replace方法的第二个参数 最近又重新看了下高程4,又是不同的收获,其中对replace方法印象较深,因为之前做的一个小功能可以用这个方法的第二个参数很轻松轻松地实现,这里简单记录一下。
113 0
|
JavaScript 前端开发 测试技术
5 种在 JavaScript 中获取字符串第一个字符的方法
在本文中,我们将研究多种方法来轻松获取 JavaScript 中字符串的第一个字符。
5 种在 JavaScript 中获取字符串第一个字符的方法
|
JavaScript 前端开发
|
JavaScript 前端开发
|
存储 JavaScript 前端开发