无法获取使用 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
而不是检查未定义。
我正在尝试获取使用 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
而不是检查未定义。