2

我希望动态创建一些 jquery 变量。在我的代码中,我有一个循环,并且我想使用循环值创建一些变量。这是我的示例代码。

array=["student","parent","employee"]

$.each(user_types, function( index, value ){
  var value+"_type" // this is the type of variable i want to build.
})

我发现了eval函数。该代码是这样的。

var type = "type"
eval("var pre_"+type+"= 'The value of dynamic variable, val';");

alert(pre_type) // this gives 'The value of dynamic variable, val' in alert box.

是否有任何替代方法,因为我已经阅读了 eval 函数在编码.js文件时不是首选。

4

3 回答 3

12

每当您发现自己在变量名中使用变量时,您可能想要使用对象字面量。使用花括号创建对象{},然后使用方括号表示法设置对象属性键:

var user_types = ["student","parent","employee"];
var types = {};

$.each(user_types, function( index, value ){
  types[value] = 'The value of dynamic variable, val';
});

JSFiddle

注意:你没有标记它,但我假设因为你已经使用each()过你正在使用 jQuery,如果我错了,请纠正我。

于 2013-11-14T11:54:08.503 回答
6

首先,我必须说,我想不出你为什么要这样做。

如果您确实需要在全局范围内拥有这些变量,则可以执行以下操作:

var array=["student","parent","employee"]

array.forEach(function(value){
  window[value+"_type"] = 'My value ' + value;
});

console.log(student_type);
console.log(parent_type);
console.log(employee_type);

如果您不希望全局范围内的变量,恐怕我不知道一个优雅的解决方案。

我使用array.forEach而不是你的 jQuery 循环,因为这个问题根本与 jQuery 无关,而且我认为你没有说足够多的逻辑来制作一个连贯的例子。

编辑:我应该明确表示,虽然创建的“变量”的行为与全局范围内的其他变量很相似,但它们不是变量。以下是它们的不同之处:

// Difference 1: hoisting
console.log(x); // undefined
console.log(y); // ReferenceError: y is not defined
var x = 5;
window[y] = 5;
console.log(x); // 5
console.log(y); // 5
// Difference 2: [[Configurable]] 
delete x;
delete y;
console.log(x); // 5
console.log(y); // ReferenceError: y is not defined
于 2013-11-14T11:53:08.820 回答
0

如果要在字符串中添加中间变量,可以按如下方式进行:

var itemSelect: number = 1;
$(`#tab${this.itemSelect}-tab`).tab('show');
/* Result -> $(`#tab1-tab`).tab('show');  */

/* HTML */
<a id="tb1-tab"> </a>
于 2020-08-21T19:07:57.337 回答