JavaScript-jQuery-我的dataSource()函数安全吗?-如何测试

JavaScript-jQuery-我的dataSource()函数安全吗?-如何测试,javascript,jquery,eval,Javascript,Jquery,Eval,我是StackOverflow的新手,不确定我是否应该在这里问这个问题,所以如果我在错误的地方问这个问题,请让我知道 我想用javascript(比如ASP.NET)实现dataSource。因此,我创建了一个具有以下功能的jQuery插件: $.getUniqueString = function (prefix) { if (!prefix) prefix = "s"; for (var loopIndex = 0; true; loopIndex++) {

我是StackOverflow的新手,不确定我是否应该在这里问这个问题,所以如果我在错误的地方问这个问题,请让我知道

我想用javascript(比如ASP.NET)实现
dataSource
。因此,我创建了一个具有以下功能的jQuery插件:

$.getUniqueString = function (prefix) {
    if (!prefix) prefix = "s";
    for (var loopIndex = 0; true; loopIndex++) {
        if (typeof window[prefix + loopIndex] != "undefined") { // if sourceId exists
            continue;
        }
        prefix = prefix + loopIndex;
        break;
    }
    return prefix;
}

$.fn.dataSource = function (source) {

    var sourceId;
    if (!source) {
        sourceId = $(this).attr("data-source-id");
        return window[sourceId];
    }

    sourceId = $.getUniqueString();
    $(this).attr("data-source-id", sourceId);
    window[sourceId] = source;
}
这个插件工作正常。到目前为止,我还没有遇到任何困难。以下是指向工作示例的链接(fiddle):

但是,我的问题是:


  • 我的代码是否足够安全,客户端浏览器不会崩溃
  • 有没有进一步优化此代码的建议
  • 还有其他更好地实现相同功能的选项吗

任何帮助都将不胜感激。

这里不需要评估。您可以获取全局变量并将其设置为
窗口
对象的属性

$.getUniqueString = function (prefix) {
    if (!prefix) prefix = "s";
    for (var loopIndex = 0; true; loopIndex++) {
        if (typeof window[prefix + loopIndex] != "undefined") { // if sourceId exists
            continue;
        }
        prefix = prefix + loopIndex;
        break;
    }
    return prefix;
}

$.fn.dataSource = function (source) {

    var sourceId;
    if (!source) {
        sourceId = $(this).attr("data-source-id");
        return window[sourceId];
    }

    sourceId = $.getUniqueString();
    $(this).attr("data-source-id", sourceId);
    window[sourceId] = source;
}

您不需要
eval()
<代码>如果(窗口类型[前缀+循环索引]!=未定义)将执行相同的操作。好的,谢谢帮助。更新fiddle…“我的代码是否足够安全,客户端浏览器不会崩溃?”在流行浏览器上测试并查看结果如何?我总是在firefox和explorer上测试东西,这对我来说是最好和最差的选择。
eval()
的一个严重问题是它阻止JavaScript运行时优化代码。如果函数包含
eval()
,那么优化器可能根本不会优化函数(因为它无法判断发生了什么)。