无法获取使用 eval() 评估的字符串的类型

Can't get typeof of a string evaluated with eval()

我正在尝试获取使用 eval() 评估的字符串的类型,但没有成功。

该变量是一个存储在数组中的字符串,其中包含我想知道是否已定义的可能对象的名称。

有人可以帮忙吗?

麻烦的是if ( typeof eval( x[i][0] ) !== 'undefined' ),这是我的代码:

    var infoslider = [
    ["revapi5", "el-masnou", "sant-andreu-de-llavaneres"],
    ["revapi3", "sant-andreu-de-llavaneres", "cardedeu"],
    ["revapi10", "cardedeu", "eudald-carbonell"],
    ["revapi9", "arenys-de-mar", "canet-de-mar"]
];
var x = infoslider;
for (var i = 0; i < x.length; i++) {
    if ( typeof eval( x[i][0] ) !== 'undefined' ) {
        vesa(x[i][0], x[i][2]);
    }
}

我得到"ReferenceError: revapi5 is not defined"

The variable is a string stored in an array with the name of a possible object which I want to know if is defined.

如果你的意思是可能有也可能没有名为 revapi5 的变量 已声明 并且它将具有 undefined 以外的值,如果它是已声明,并且您想知道它是否是,您 是否可以 typeof 移动到 字符串中 eval'ing:

if ( eval( "typeof " + x[i][0] ) !== 'undefined' ) {

但是,几乎肯定有更好的方法来解决您试图通过这样做解决的任何问题。

上面的例子:

var revapi5 = {}; // We do have 5, but we don't have the others
var infoslider = [
  ["revapi5", "el-masnou", "sant-andreu-de-llavaneres"],
  ["revapi3", "sant-andreu-de-llavaneres", "cardedeu"],
  ["revapi10", "cardedeu", "eudald-carbonell"],
  ["revapi9", "arenys-de-mar", "canet-de-mar"]
];
var x = infoslider;
for (var i = 0; i < x.length; i++) {
  if (eval("typeof " + x[i][0]) !== 'undefined') {
    snippet.log(x[i][0] + " is declared and has a value other than undefined");
  } else {
    snippet.log(x[i][0] + " is either undeclared, or has the value undefined");
  }
}
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

不要使用 eval,试试这个:

typeof window[ x[i][0] ] !== 'undefined'

取自this answer

更新:

如果您的变量没有全局存储,您可以将 window 交换为它们存储在其中的任何对象(假设它在范围内)...如果它是同一个对象,那么 this 应该工作。

此外,@vol7ron 提出了一个更好的建议,即使用 .hasOwnPropery 而不是检查未定义。