Javascript将字符串计算为比较运算符

时间:2014-04-07 17:37:43

标签: 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 = "!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" :/

4 个答案:

答案 0 :(得分:2)

你可以使用" eval"实现你想要的功能。

答案 1 :(得分:2)

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

这样的事情将是一个合适的解决方案:

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

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

var checkFunctions = {
    "0":  function(num) { return parseFloat(num) === 0  },
    "!0": function(num) { return parseFloat(num) !== 0; }
};

接下来,修改if语句,根据checkFunction获取正确的checkVariable,并将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.");
}

Don't use eval needlessly!

  

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

     

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

     

对于常见的eval()有安全(和快速!)的替代方案   用例。

答案 2 :(得分:1)

这有效:

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

答案 3 :(得分:1)

使用parseInt

将字符串解析为整数
if(parseInt("1")!=parseInt("0"))
{
 console.log('Try this');
}