无法获得使用eval()计算的字符串的typeof

时间:2015-04-17 13:18:04

标签: javascript string object eval typeof

我正在尝试使用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未定义”

2 个答案:

答案 0 :(得分:3)

不要使用eval,试试这个:

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

取自this answer

<强>更新

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

另外@ vol7ron更好地建议使用.hasOwnPropery而不是检查未定义。

答案 1 :(得分:1)

  

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

如果您的意思是可能会或可能没有名为revapi5 的变量声明,并且如果声明了它,则它将具有undefined以外的值,并且您想要要知道是否是,您可以typeof 移动到字符串中eval&#39}:

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

,几乎可以肯定这是一种更好的方法来解决您尝试通过这样做解决的问题。

上述例子:

&#13;
&#13;
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");
  }
}
&#13;
<!-- 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>
&#13;
&#13;
&#13;