【问题标题】:Javascript eval ReferenceError: is not definedJavascript eval ReferenceError:未定义
【发布时间】:2014-06-02 19:00:21
【问题描述】:

我需要从我从脚本中提取的参数中动态创建一个变量的值。但我首先要检查它是否已经存在,所以如果它已经设置,我不会覆盖它。

我正在利用 eval 扩展变量的值并将其标记到变量后缀上,但无论我使用什么来检查未定义的内容,我都会在检查时遇到参考错误。

下面是简单的代码sn-p

chkUser = args[1];

if(typeof eval(chkUser+"lastseen")==="undefined") ;

我也试过把 eval 放在括号里,把 undefined 放在 ' ' 里,然后把它们完全拉出来,然后把 typeof 切换到 JavaScript 标准 undefined

if( eval(chkUser+"lastseen")=== undefined) ;

但我总是得到 ReferenceError: robertlastseen is not defined 或者 chkUser 扩展到什么。

【问题讨论】:

  • 运行typeof 调用inside eval()if(eval('typeof '+chkUser+'lastseen') === "undefined")
  • 您是否考虑将这些存储为Object 的属性而不是单独的变量? Bracket notation 通常比 eval() 简单,并且不会抛出 ReferenceErrors。或者,传递一个用户对象而不是变量前缀作为args[1] -- if (typeof args[1].lastseen === 'undefined')
  • I need to dynamical create a variable off the value of a variable - 为什么?
  • if (window[args[1]+"lastseen"]) ...

标签: javascript eval referenceerror


【解决方案1】:

这只是一个猜测,但似乎在评估之前没有定义变量。

试试这个Fiddle

对我来说很好用。

在评估变量之前尝试对变量进行硬编码,如下所示:

chkUser = args[1];
var robertlastseen = 'Hardcode';
console.log(eval(chkUser+"lastseen"));

那么你应该可以调试你的代码了。

如果你只是想测试这个变量是否被声明,试试这个:

if(eval('typeof ' + chkUser + 'lastseen') === "undefined"){
    //Variable undefined
}

【讨论】:

  • 这是正确的,如果之前从未见过它也不应该如此,因此检查未定义,因此可以根据之前没有见过用户采取行动。
猜你喜欢
  • 2018-02-13
  • 2017-12-23
  • 1970-01-01
  • 1970-01-01
  • 2017-12-23
  • 2021-11-26
  • 1970-01-01
  • 1970-01-01
  • 2012-08-24
相关资源
最近更新 更多