微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 eval() - 未捕获的语法错误:pageLoad

如何解决使用 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 举报,一经查实,本站将立刻删除。