Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript将字符串作为比较运算符进行求值_Javascript_Jquery - Fatal编程技术网

Javascript将字符串作为比较运算符进行求值

Javascript将字符串作为比较运算符进行求值,javascript,jquery,Javascript,Jquery,我想知道是否可以比较int“1”和字符串“!0”,并使结果为真 例如: //Comparing 0 and "0" works... var myVariable = 0; var checkVariable = "0"; if(myVariable == checkVariable) { console.log('Works'); } //Comparing 1 and "!0" doesn't work: var myVariable = 1; var checkVariable =

我想知道是否可以比较int
“1”
和字符串
“!0”
,并使结果为真

例如:

//Comparing 0 and "0" works...
var myVariable = 0;
var checkVariable = "0";
if(myVariable == checkVariable)
{
   console.log('Works');
}

//Comparing 1 and "!0" doesn't work:
var myVariable = 1;
var checkVariable = "!0";
if(myVariable == checkVariable)
{
   //I would LIKE this to be true!
   console.log('This part doesn't work');
}
关于如何实现这一点有什么想法吗

我愿意接受建议,
“!=0”
也可以

////////////////////////////////////////////////// 更新:

所以我现在尝试评估,结果如下:

var myVariable = 20;
var checkVariable = "20";
eval(myVariable,checkVariable);
   //Returns "20", which is ok I guess, but it would be nice if it returned "true"

var myVariable = 21;
var checkVariable = "!20";
eval(myVariable,checkVariable);
   //Returns "21", which is ok, but it would be nice if it returned "true"

var myVariable = 21;
var checkVariable = "20";
eval(myVariable,checkVariable);
   //Returns "20", which is *wrong*
在chrome的javascript控制台(@Ishita)中也尝试了这一点:

您可以使用“eval”功能来完成您想要的任务。

此功能:

var a = 1;
var b = "!0"; 
if(a == eval(b))
{
   console.log(true);
} else {
console.log(false);
}

使用parseInt将字符串解析为整数

if(parseInt("1")!=parseInt("0"))
{
 console.log('Try this');
}

不要使用
eval
它被广泛认为是Javascript最糟糕的部分之一,在这种情况下根本不需要它。(有关这方面的更多信息,请参见此答案的底部)

这样的解决方案是合适的:

JSFiddle:

首先,设置
checkVariables
和实现预期比较的函数的映射。所有这些函数都接受一个数字,并根据比较结果返回true/false

var checkFunctions = {
    "0":  function(num) { return parseFloat(num) === 0  },
    "!0": function(num) { return parseFloat(num) !== 0; }
};
接下来,修改if语句,根据
checkVariable
获取适当的
checkFunction
,并将
myVariable
传递到该函数中

//Comparing 0 and "0" works...
var myVariable = 0;
var checkVariable = "0";

if ( checkFunctions[checkVariable](myVariable) )
{
   console.log(myVariable + " equals zero");
}

//Comparing 1 and "!0" doesn't work:
var myVariable = 1;
var checkVariable = "!0";

if ( checkFunctions[checkVariable](myVariable) )
{
   console.log(myVariable + " does not equal zero.");
}

eval()是一个危险的函数,它执行传递的代码 以调用方的权限。如果使用字符串运行eval() 这可能会受到恶意方的影响,您最终可能会运行 用户计算机上具有您的权限的恶意代码 网页/分机。更重要的是,第三方代码可以看到 调用eval()的作用域,这可能导致可能的攻击 以类似功能不易受影响的方式

eval()通常也比备选方案慢,因为它必须 调用JS解释器,同时优化许多其他构造 通过现代JS引擎

对于常见问题,有安全(快速)的eval()替代方法 用例


您必须使用自己的解析器/解释器或使用
eval()
对隐藏在字符串中的表达式求值。没有办法让语言隐式地这样做。有更好的方法来处理这个问题problem@CoryDanielson:(K我想另一种方法。谢谢大家:)太棒了!刚刚尝试了eval(myVariable,checkVariable),它成功了。那很简单,谢谢!编辑:等等,没有问题,现在更新我的帖子。小心点-谢谢!我尝试了这个方法,但“a==eval(b)”的计算结果为false:(这是给你的现场演示。它似乎对我有用。我很好奇为什么它对你不起作用。哦!是的,这很奇怪!我在chrome的javascript控制台中尝试过它,我将在我的实际代码中尝试它,看看它是否真的起作用,我也在chome的控制台中尝试过,它起作用了。想知道我们两个做了什么不同的事吗?谢谢!我想知道但是,我们可以在第二个变量中使用“!=”:太棒了!谢谢你给出了这么好的答案!^ ^我更新了checkFunctions以同时使用parseFloat,因为
parseInt(0.99)==0
将返回true。
parseInt(0.99)
只抛出小数(不进行任何舍入)并返回
0
//Comparing 0 and "0" works...
var myVariable = 0;
var checkVariable = "0";

if ( checkFunctions[checkVariable](myVariable) )
{
   console.log(myVariable + " equals zero");
}

//Comparing 1 and "!0" doesn't work:
var myVariable = 1;
var checkVariable = "!0";

if ( checkFunctions[checkVariable](myVariable) )
{
   console.log(myVariable + " does not equal zero.");
}