Using eval() - Uncaught SyntaxError: Unexpected identifier at pageLoad

Using eval() - Uncaught SyntaxError: Unexpected identifier at pageLoad

第一次使用Whosebug。 :)

我是 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)

我在 nameJ 之后得到这个输出 console.log

VM321:1 Uncaught SyntaxError: Unexpected identifier at pageLoad

任何人都知道我该如何解决这个问题或以不同的方式处理这个问题?不幸的是,我无法将变量名称(例如 passengerXName)更改为可以更轻松地分配动态变量的名称。

谢谢

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;
}

自从 1996 年左右以来,我很少看到 eval 的任何理由

这是推荐的

const rides = [
{ passengerDetails: {first:"Fred",last:"Flinstone"}},
{ passengerDetails: {first:"Wilma",last:"Flinstone"}}
]

const names = rides.map(ride => `${ride.passengerDetails.first} ${ride.passengerDetails.last}`)
console.log(names)

甚至

const rides = [
{ passengerDetails: {first:"Fred",last:"Flinstone"}},
{ passengerDetails: {first:"Wilma",last:"Flinstone"}}
]

const names = rides.reduce((acc,ride,i) => {
  acc[`passenger${i+1}name`] = `${ride.passengerDetails.first} ${ride.passengerDetails.last}`
  return acc;
  },{})
console.log(names)

如果必须,假设您有一个 window 范围将其添加到

,请尝试此操作

const rides = [
{ passengerDetails: {first:"Fred",last:"Flinstone"}},
{ passengerDetails: {first:"Wilma",last:"Flinstone"}}
]

rides.forEach((ride,i) => {
    let nameJ = `${ride.passengerDetails.first} ${ride.passengerDetails.last}`;
    window[`passenger${i+1}Name`]=nameJ;
})
console.log(passenger1Name)