如何将两个JavaScript变量合并为一个字符串?

21
我想将一个js变量与另一个变量连接起来,以创建另一个变量名...就像这样;
for (i=1;i<=2;i++){
    var marker = new google.maps.Marker({
position:"myLatlng"+i,
map: map, 
title:"title"+i,
icon: "image"+i
}); 
}

后来我有

myLatlng1=xxxxx;
myLatlng2=xxxxx;

我并不是一个 JavaScript 专家,所以没有参考书籍。这只是因为我正在处理谷歌地图 API 的工作,而这需要一些我不太懂的 JS 知识 :) - Lenny Magico
5个回答

42

使用连接运算符+,以及数值类型会自动转换为字符串的事实:

var a = 1;
var b = "bob";
var c = b + a;

现在的问题是bob1是一个具有进一步值的变量。你给我的代码创建了一个字符串,但我需要bob1成为一个变量名...抱歉,我稍微问错了问题,但我想要的东西甚至可能吗?我知道在PHP中这是可能的,但在JavaScript中可以吗? - Lenny Magico
1
@Lenny:使用生成的字符串“bob1”作为变量名是一个完全不同和独立的问题。你可以使用eval来做到这一点,但一般是被反对的。最好重新思考代码的某些方面,也许利用数组会更好。如果您对此有任何疑问,请发布一个新问题,因为这是一个单独的问题。 - Lightness Races in Orbit
我正在做的是,我从mysql数据库中调用位置坐标,并希望在谷歌地图上使用它们,有一个解决方法,那就是分别创建每个标记,但由于这可能是谷歌地图上100多个标记,这可能会引起问题,我听说过eval,但我对如何使用它有点困惑,但我会查找一些有用的教程 :) - Lenny Magico
@Lenny:我也遇到过标记的类似问题。当然,这与本问题完全无关,但我将很乐意看到您在未来发布有关Google Maps标记的任何问题。请考虑使用数组:使用JavaScript“关联数组”(对象),您可以通过变量给定的名称检索属性/值。 - Lightness Races in Orbit
Brilliant eval 起作用了,而且做了我想要的事情,问题很难,这就是为什么我道歉造成了如此多的混乱 :) - Lenny Magico
我创建的网页实际上只是用来测试php preg_match_all函数和爬取一些网站信息的,但我被制作飞机追踪器的想法所困扰,而且它似乎很快就要实现了 :) 感谢您的帮助。 - Lenny Magico

10

ES6引入了模板字符串以进行字符串拼接。模板字符串使用反引号(``)而不是我们通常使用的单引号或双引号。因此,模板字符串可以如下所示:

// Simple string substitution
let name = "Brendan";
console.log(`Yo, ${name}!`);

// => "Yo, Brendan!"

var a = 10;
var b = 10;
console.log(`JavaScript first appeared ${a+b} years ago. Crazy!`);

//=> JavaScript first appeared 20 years ago. Crazy!

6

警告!这不适用于链接。

var变量='变量',另一个='另一个';

['I would', 'like to'].join(' ') + ' a js ' + variable + ' together with ' + another + ' to create ' + [another, ...[variable].concat('name')].join(' ').concat('...');

4
你可以使用JavaScript String concat()方法。
var str1 = "Hello ";
var str2 = "world!";
var res = str1.concat(str2); //will return "Hello world!"

它的语法如下:

string.concat(string1, string2, ..., stringX)

我从未知道concat可以与3个或更多的字符串一起使用。 - Nirvana

3
如果你想将两个变量的字符串表示连接起来,可以使用加号(+)符号:
var var1 = 1;
var var2 = "bob";
var var3 = var2 + var1;//=bob1

但是如果你想将这两个值保存在一个变量中,并且仍然能够在以后访问它们,你可以创建一个对象容器:

function Container(){
   this.variables = [];
}
Container.prototype.addVar = function(var){
   this.variables.push(var);
}
Container.prototype.toString = function(){
   var result = '';
   for(var i in this.variables)
       result += this.variables[i];
   return result;
}

var var1 = 1;
var var2 = "bob";
var container = new Container();
container.addVar(var2);
container.addVar(var1);
container.toString();// = bob1

优点是您可以获取这两个变量的字符串表示形式,但稍后可以修改它们:
container.variables[0] = 3;
container.variables[1] = "tom";
container.toString();// = tom3

1
你(正确地)声明了抽象addVar,但在示例中,你选择了使用直接数组访问的方式,这是不好的!你还使用了关键字var作为变量名,然后尝试调用不存在的add函数。此外,你的toString()函数返回了比预期更多的内容,因为你遍历了variables对象的所有属性,而不仅仅是那些具有数字键的属性。在修复这些错误之后,脚本运行并产生了"1bob",而不是"bob1"。同样,你的第二个示例给出了"3tom",而不是"tom1" - Lightness Races in Orbit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接