【问题标题】:How can I check for "is not defined" eval(var) in JavaScript?如何在 JavaScript 中检查“未定义”eval(var)?
【发布时间】:2021-10-27 08:30:24
【问题描述】:

有很多信息可以检查 JavaScript 中的“未定义”正常变量,但我需要检查 eval(var),例如:

var Hello_0 = "Hello 0 !";

console.log(" Hello_0 is: " + eval("Hello_"+0));

var dinamyc_var = "Hello_"+1;

//None of the next conditionals is triggered///
if (eval(dinamyc_var) === undefined) {
     console.log(" dinamyc_var is undefined ");
} 
if (eval(dinamyc_var) === null) {
     console.log(" dinamyc_var is null ");
}
if ( typeof eval(created_node) === undefined ) {
     console.log(" dinamyc_var is typeof undefined ");
}
if ( typeof eval(created_node) === null ) {
     console.log(" dinamyc_var is typeof null ");
}

console.log(" dinamyc_var is: " + eval(dinamyc_var));

https://jsfiddle.net/mczdrv5t/

控制台显示 eval("Hello_"+0) 的值,因为已声明,但是当尝试调用未声明的 eval("Hello_"+1) 时,控制台显示下一个错误。我需要处理可能的未声明变量。

未捕获的 ReferenceError: Hello_1 未定义 在 eval (eval at ....

【问题讨论】:

  • 实际上,您永远不需要 — 或想要,真的是 — 动态变量名。改用一个简单的对象:const obj = { Hello_0: "Hello 0 !" }; ... console.log(obj["Hello_" + 0]); console.log(obj.hasOwnProperty("Hello_" + 1)); 等,或者,对于索引结构,一个数组。见"Variable" variables in JavaScript。使用eval 和必要的trycatch,只会让每个人的生活变得不必要地艰难,包括你自己的。
  • [题外话]:dinamyc实际上拼写为dynamic

标签: javascript


【解决方案1】:

不要使用 eval。如果您需要存储不同名称的值,请改用对象:

const values = {}

values["Hello_0"] = "Hello 0 !"

if (values["Hello_" + 1] === undefined) {
  // ...
}

作为旁注,if (eval('typeof ' + dynamic_var) === 'undefined') 可以工作,但同样,不要使用 eval。

也不要使用window[dynamic_var] = ... 来存储全局变量,名称可能会与现有的全局变量冲突。

【讨论】:

  • 感谢“typeof”评估建议!在我的特殊情况下,我不能使用对象。
  • 您的特殊情况是什么?其他人是否已经在全局范围内定义了变量?在这种情况下,window[varname] == undefined 仍然会更干净。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-25
  • 2011-02-28
相关资源
最近更新 更多