Javascript将字符串作为比较运算符进行求值
我想知道是否可以比较intJavascript将字符串作为比较运算符进行求值,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 =
“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.");
}