表达式使用&的意外结果

时间:2012-07-13 10:27:07

标签: javascript

如果

document.write(eval("(2 == 2)"));

打印 true

并且

document.write(eval("(2 == 2)&(5<10)"));

打印 1
为什么不总是返回true或false。如果条件在字符串中增加,则给出0或1.获得相同类型结果的方法是什么。

3 个答案:

答案 0 :(得分:5)

因为&不是逻辑运算符,所以它是bitwise (numeric) operator。您可能需要&&logical AND operator

请注意,您的代码示例中没有理由使用eval。 (几乎永远不会使用eval的任何理由,几乎总是有更好的选择 - 在这种情况下,你甚至不需要替代方案。)删除它会有完全相同的结果

答案 1 :(得分:1)

&是一个按位运算符并返回一个数字。试试"(2 == 2)&&(5<10)"

答案 2 :(得分:1)

它打印1,因为您使用了按位和运算符(&)而不是逻辑和运算符(&&)。

因为JavaScript是松散类型的,它会将布尔值true视为1的int值,您可以通过调用来检查

document.write(eval("(2 == 2)+(5<10)"));

结果将是

2