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

Javascript evaluate string as a comparison operator

本文关键字:运算符 计算 比较 字符串 Javascript      更新时间:2023-09-26

我想知道是否有可能比较一个整数"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"也很好。

//

/更新:

所以我现在正在尝试 eval,结果如下:

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)中也尝试了这个:

var myVariable = 21;
var checkVariable = "!20";
myVariable == eval(checkVariable);
   //Returns "false", which should be "true" :/

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

像这样的东西将是一个合适的解决方案:

JSFiddle: http://jsfiddle.net/CoryDanielson/zQjyz/

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

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"函数来完成您想要的。

这有效:

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');
}