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


相关文章
|
3月前
|
JavaScript 前端开发 C++
JavaScript用indexOf()在字符串数组中查找子串时需要注意的一个地方
JavaScript用indexOf()在字符串数组中查找子串时需要注意的一个地方
|
存储 人工智能 JavaScript
JavaScript变量复制值和传递参数
相比于其他语言,JavaScript 中的变量可谓独树一帜。正如 ECMA-262 所规定的,**JavaScript 变量是 松散类型的**,而且变量不过就是特定时间点一个特定值的名称而已。由于没有规则定义变量必须包含什 么数据类型,变量的值和数据类型在脚本生命期内可以改变。这样的变量很有意思,很强大,当然也有 不少问题。本章会剖析错综复杂的变量。
110 0
JavaScript变量复制值和传递参数
|
JavaScript
JS输出、获取元素,变量,事件组成,流程控制,对象,函数
JS输出、获取元素,变量,事件组成,流程控制,对象,函数
|
7月前
|
JavaScript 前端开发
变量提升:JavaScript代码是按顺序执行的吗?
变量提升:JavaScript代码是按顺序执行的吗?
48 0
|
JavaScript 前端开发 安全
在javascript中如何将字符串转成变量或可执行的代码?
有这样一个需求:当前作用域内有未知的一些变量,其中一个函数中可以拿到某个变量名字符串,怎么能在函数内通过传进来的字符串取到作用域链中的变量值
214 0
|
自然语言处理 JavaScript 前端开发
JavaScript 中 Eval 函数的前世今生,执行代码字符串
JavaScript 中 Eval 函数的前世今生,执行代码字符串
110 0
JavaScript 中 Eval 函数的前世今生,执行代码字符串
|
Java Shell 开发工具
【Shell】算术运算符、流程控制、函数使用、数组以及加载其它文件的变量(二)
【Shell】算术运算符、流程控制、函数使用、数组以及加载其它文件的变量
108 0
【Shell】算术运算符、流程控制、函数使用、数组以及加载其它文件的变量(二)
|
Shell
【Shell】算术运算符、流程控制、函数使用、数组以及加载其它文件的变量(一)
【Shell】算术运算符、流程控制、函数使用、数组以及加载其它文件的变量
122 0
【Shell】算术运算符、流程控制、函数使用、数组以及加载其它文件的变量(一)