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)
第一次使用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)