Javascript 使用eval()-Uncaught SyntaxError:页面加载时出现意外标识符

Javascript 使用eval()-Uncaught SyntaxError:页面加载时出现意外标识符,javascript,dynamic-variables,Javascript,Dynamic Variables,首次使用stackoverflow.:) 我是一个JS初学者,尝试向变量列表中添加值,这些变量可能会根据变量的数量而变化。(即,如果numRiders=4,我需要为passenger1Name、passenger2Name、passenger3Name、passenger4Name赋值) 我正在尝试在循环中使用eval来执行此操作: for(i = 0; i<=numRiders; i++) { j = i+1 var l ='var ' var k = 'pass

首次使用stackoverflow.:)

我是一个JS初学者,尝试向变量列表中添加值,这些变量可能会根据变量的数量而变化。(即,如果numRiders=4,我需要为passenger1Name、passenger2Name、passenger3Name、passenger4Name赋值)

我正在尝试在循环中使用eval来执行此操作:

for(i = 0; i<=numRiders; i++) {
    j = i+1
    var l ='var '
    var k = 'passenger'
    let nameJ = ride[i].passengerDetails.first + ' ' + ride[i].passengerDetails.last;
    console.log (nameJ)
    eval(l+k+j+ 'Name' + '= ' + nameJ + ';')
    console.log(passenger1Name)

(i=0;i
nameJ
似乎是一个字符串。因此需要在其周围加引号

eval(l+k+j+ 'Name' + '= "' + nameJ + '";')

但正如其他人在评论中所说,像这样动态定义变量几乎从来不是你真正想要的。

nameJ
似乎是一个字符串。因此,你需要在它周围加上引号

eval(l+k+j+ 'Name' + '= "' + nameJ + '";')

但正如其他人在评论中所说,像这样动态定义变量几乎从来不是你真正想要的。

来自@ZacAnger的选项


var names = {};
for(i = 0; i<=numRiders; i++) {
    j = i+1
    
    let nameJ = ride[i].passengerDetails.first + ' ' + ride[i].passengerDetails.last;

    names['passenger'+ j+ 'Name'] = nameJ;
}

变量名称={};

对于(i=0;i来自@ZacAnger的选项


var names = {};
for(i = 0; i<=numRiders; i++) {
    j = i+1
    
    let nameJ = ride[i].passengerDetails.first + ' ' + ride[i].passengerDetails.last;

    names['passenger'+ j+ 'Name'] = nameJ;
}

变量名称={};

对于(i=0;i自1996年以来,我很少看到任何评估的理由

建议这样做

const-rides=[
{乘客详情:{第一个:“弗雷德”,最后一个:“弗林斯通”},
{乘客详情:{第一个:“威尔玛”,最后一个:“弗林斯通”}
]
const names=rides.map(ride=>`${ride.passengerDetails.first}${ride.passengerDetails.last}`)

console.log(name)
我从1996年左右开始就很少看到评估的理由

建议这样做

const-rides=[
{乘客详情:{第一个:“弗雷德”,最后一个:“弗林斯通”},
{乘客详情:{第一个:“威尔玛”,最后一个:“弗林斯通”}
]
const names=rides.map(ride=>`${ride.passengerDetails.first}${ride.passengerDetails.last}`)


log(names)
为什么对变量名有如此严格的要求?为什么不使用数组或对象?
const passengers={};passengers['passenger'+i]=nameJ
?@ZacAnger是的,但是,在这种情况下,即使是一个对象也看起来很奇怪。它是一组按结构化顺序排列的值。这显然是一个数组。@CharlieFish是的,你说得对,如果OP只需要乘客姓名,那么他们就需要一个数组。乘客详细信息已经在
ride
数组中了。为什么要求如此严格关于变量名的要求?为什么不直接使用数组或对象?
const-patients={};patients['patients'+i]=nameJ
?@ZacAnger是的,但是,在这种情况下,即使是一个对象也看起来很奇怪。它是一组按结构化顺序排列的值。这显然是一个数组。@CharlieFish是的,你说得对,如果OP只需要乘客姓名,他们需要一个数组。乘客详细信息已经在
ride
数组中。Thx中有答案乡亲们。nameJ是我在上面一行中定义的变量,不是字符串。是的,你是对的,数组会让它变得更简单。但我正在尝试解决这些变量名称。它是一个包含有名字和姓氏的字符串的变量。@ramon gondim我会再次重申。这不是你想做的事情。我强烈反对trongly强烈建议您考虑其他选择。
eval
存在许多安全缺陷。正如我上面所问的,为什么您需要对变量名如此严格?避免数组显然会产生比现在更多的问题。我建议您尝试回到基本面,真正关注您需要的内容ed并抛出不必要的要求(如变量命名)。@ramon gondim想一想:如果你像这样动态定义变量名,你将如何访问它们?你是否也将使用
eval()
Thx代表答案。nameJ是我在上面一行中定义的变量,不是字符串。是的,你说数组会让它更简单是对的。但我正在尝试解决这些变量名称。它是一个包含有名字和姓氏的字符串的变量。@ramon gondim我会再次重申。这不是你想要的方式o正在做一些事情。我强烈建议您考虑其他选择。
eval
存在许多安全缺陷。正如我上面所问的,为什么您需要对变量名如此严格?避免使用数组显然会产生比现在更多的问题。我建议尝试回到基本方法s并真正关注您需要的内容,抛弃不必要的需求(如变量命名)。@ramon gondim思考一下:如果您像这样动态定义变量名,您将如何访问它们?您是否也将在那里使用
eval()