当前位置:  开发笔记 > 编程语言 > 正文

JavaScript中的eval有哪些替代方案?

如何解决《JavaScript中的eval有哪些替代方案?》经验,为你挑选了3个好方法。

我有一些看起来像这样的代码:

function StrippedExample(i1, i2, i3, i4, i5, i6, i7, i8) {
    this.i = [];
    for (var i=1,j=0 ;i<9;i++) {
        var k = eval("i"+i);
        if (k > 0) {
            this.i[j++] = k;
        }
    }
}

FireBug profiler声称第二个最长的函数是eval(),占运行时间的近6%.

每个人都说eval是EVIL(就像糟糕的那样)而且很慢(正如我所发现的那样),但我真的无法做任何事情 - 服务器只是将数据从数据库中拉出来并推送到浏览器.

我有什么替代品?我可以像在服务器上做的那样做,但这只会将负担转移到链条上方.我无法更改数据库布局,因为所有内容都挂钩到这8个变量,这是一项艰巨的任务.



1> benzado..:
function StrippedExample(i1, i2, i3, i4, i5, i6, i7, i8) {
    var args = [i1, i2, i3, i4, i5, i6, i7, i8]; // put values in an array
    this.i = [];
    for (var i=0,j=0 ;i<8;i++) { // now i goes from 0-7 also
        var k = args[i]; // get values out
        if (k > 0) {
            this.i[j++] = k;
        }
    }
}

上面的代码可以进一步简化,我只是做了最小的改变来摆脱eval.你可以摆脱j,例如:

function StrippedExample(i1, i2, i3, i4, i5, i6, i7, i8) {
    var args = [i1, i2, i3, i4, i5, i6, i7, i8];
    this.i = [];
    for (var i = 0; i < args.length; i++) {
        var k = args[i];
        if (k > 0) { this.i.push(k); }
    }
}

是等价的.或者,使用内置arguments对象(以避免在两个位置放置参数列表):

function StrippedExample(i1, i2, i3, i4, i5, i6, i7, i8) {
    this.i = [];
    for (var i = 1; i < arguments.length; i++) {
        var k = arguments[i];
        if (k > 0) { this.i.push(k); }
    }
}

即使你没有过滤列表,你也不想做某些事情,this.i = arguments因为arguments它不是真正的数组; 它有一个callee你不需要的属性,并且缺少一些你可能需要的数组方法i.正如其他人所指出的,如果你想快速将arguments对象转换为数组,你可以使用这个表达式:

Array.prototype.slice.call(arguments)

您可以使用它而不是var args = [i1, i2 ...上面的行.



2> CMS..:

您只是从函数8参数创建一个数组,删除小于或等于零的数组.

以下代码是等效的,它适用于任意数量的参数:

function StrippedExample() {
  var args = [];

  for (var i = 0; i < arguments.length; i++) {
    if (arguments[i] > 0) {
      args.push(arguments[i]);
    }
  }
  //...
}



3> Quentin..:

    使用一个参数调用该函数 - 一个数组

    使用arguments对象

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有