JavaScript-jQuery-我的dataSource()函数安全吗?-如何测试
我是StackOverflow的新手,不确定我是否应该在这里问这个问题,所以如果我在错误的地方问这个问题,请让我知道 我想用javascript(比如ASP.NET)实现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++) {
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()
,那么优化器可能根本不会优化函数(因为它无法判断发生了什么)。