在合并字符串时如何引用数组元素?

时间:2017-02-04 20:26:40

标签: javascript

如果我有:

var b1 = ["B", "V"];

我可以使用"V";

访问b1[1]

为什么以下不起作用:

console.log(("b"+1)[1]);

我在控制台得到1。

3 个答案:

答案 0 :(得分:2)

如果在全局范围中定义了b1,则可以将其作为窗口对象的成员进行访问:

// When variable is defined in global scope
var b1 = ["B", "V"];
console.log(window['b'+1][1]);

// Inside a function you're stuck with eval.
// You should be really, really careful with eval.
// Most likely you can change your design so you wont need it.
function test() {
  var b2 = ["B", "V"];
  console.log(eval(('b'+1))[1]);
}

test();

// Just to demonstrate that accessing an object's properties
// always works the same way
window['console']['log']('hi');

答案 1 :(得分:1)

您在控制台中获得1,因为"b"+1被格式化为字符串"b1"。此字符串中的索引1是字符1

做你想做的事是非常糟糕的主意。如果要使用其他调用中的数字访问这些变量,请使用数组b = [],然后使用b [index] [subindex]`作为字符串。

或使用window范围变量。

答案 2 :(得分:0)

为什么会得到这样的结果

当你连接一个String和一个数字(+)时,你得到一个String。在String上使用括号表示法将获得某个索引处的字符。在您的情况下,"1"

如何使其发挥作用

如果您的b1变量是全局变量(未在函数内定义),则它是window的属性。因此,您可以使用window["b"+1]访问它。



var b1 = ["B", "V"];

console.log( window["b"+1][1] ); // "V"




如果它是本地的(在函数内部),请使用Object来存储它:



var scope = {};
scope.b1 = ["B", "V"];

console.log( scope["b"+1][1] ); // "V"