Javascript 将字符串作为比较运算符进行计算
Javascript evaluate string as a comparison operator
我想知道是否有可能比较一个整数"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');
}
- 这是什么 ==- javascript 运算符
- 根据元素和容器大小计算边距
- 从Rally获取一个特定的标记,以便计算另一个字段中的值
- jQuery/JS包含运算符或类似运算符
- Javascript逻辑运算符和字符串/数字
- 使用D3.js计算带有字母间距的文本长度
- 模运算符前的双水平线
- 使用CSS或JavaScript计算分页符的数量
- 可以't计算自定义谷歌地图的js
- 如何计算每个元素's的高度,并将这些值用作函数中的变量
- JavaScript计算帮助(乘以时间)
- 如何计算对象文字中的键
- JavaScript循环无法正确计算/显示结果
- jQuery's trim()的前缀为not运算符
- 由 OR 运算符分隔的语句的计算顺序
- 根据数组值和运算符进行计算
- Javascript:如何在第 2 和第 3 语句中使用三元运算符计算 for 循环
- JavaScript三元运算符,用于计算字符串中的字符数
- 如何计算数字和数学运算符的数组(或字符串)
- Javascript 将字符串作为比较运算符进行计算