gpt4 book ai didi

javascript - 如何避免在此示例中使用 `eval()`?

转载 作者:行者123 更新时间:2023-11-28 12:43:35 26 4
gpt4 key购买 nike

我正在尝试使用字符串作为对变量的引用以传递到函数中。例如:

var names = ['Peter', 'John'],

var hasName = function(name){
var params = ['names'];
return $.inArray(name, eval( params[0] )) === -1;
};

如何避免eval()

编辑:

来自params[0]的字符串来 self 的html中inputdata-qval。包含实际数据的数组可以在任何地方声明,params[0] 只是对 data-qval 中作为字符串传入的数组的引用,它是一个参数。我在这里粘贴了我的插件代码。

http://pastebin.mozilla.org/1598528101行

完整示例:http://jsfiddle.net/elclanrs/ZsS2D/29/

它目前有效,我只是在寻找一种摆脱 eval()...

最佳答案

在这种特殊情况下,只需使用名称:

var names = ['Peter', 'John'],
var hasName = function(name){
var params = ['names'];
return $.inArray(name, names ) === -1;
};

(另请参阅下面的注释。) (您的编辑使上述内容不适用。)

如果您尝试使用字符串“names”在某个容器中查找 names 数组,则必须拥有对该容器的引用,例如:

var obj = {
names: ['Peter', 'John'
};
var hasName = function(name){
var params = ['names'];
return $.inArray(name, obj[params[0]] ) === -1;
};

如果除了您执行此操作的变量范围之外没有任何容器,则必须使用 eval。但你可以(通常应该)调整一些东西,这样你就有一个容器(如上所述),这样你就可以避免它。请注意,如果 names 在全局范围内声明,则您确实有一个容器 (window)。

总结一下:

  1. 如果 names 是全局范围内的 var (或 implicit global ),则 window[params[0]]将为您提供引用。

  2. 如果names已存在于某个容器对象中,您可以使用container[params[0]]来获取对其的引用。

  3. 如果 names 是函数内的 var,则无法使用没有 eval 的运行时字符串来获取它;理想情况下,不要使用 var names = [...];,而是使用 var container = {names: [...]};,然后您可以使用 容器[params[0]]

<小时/>

请注意,您的函数名为 hasName,但当数组具有名称时,它返回 true,而 false 当它发生时。您可能需要 !== -1,而不是 === -1

关于javascript - 如何避免在此示例中使用 `eval()`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10329039/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com