如何解决使用 eval() - 未捕获的语法错误:pageLoad
第一次使用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)
我在 nameJ console.log 之后立即得到这个输出
VM321:1 Uncaught SyntaxError: Unexpected identifier 在页面加载
有谁知道我该如何解决这个问题或以不同的方式解决这个问题?不幸的是,我无法将变量名称(例如,passengerXName)更改为可以更轻松地分配动态变量的名称。
谢谢
解决方法
nameJ
似乎是一个字符串。所以你需要在它周围加上引号。
eval(l+k+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"}}
]
const names = rides.reduce((acc,ride,i) => {
acc[`passenger${i+1}name`] = `${ride.passengerDetails.first} ${ride.passengerDetails.last}`
return acc;
},{})
console.log(names)
如果你必须,试试这个假设你有一个窗口范围来添加它
const rides = [
{ passengerDetails: {first:"Fred",last:"Flinstone"}}
]
rides.forEach((ride,i) => {
let nameJ = `${ride.passengerDetails.first} ${ride.passengerDetails.last}`;
window[`passenger${i+1}Name`]=nameJ;
})
console.log(passenger1Name)
来自@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;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。