为什么javascript:alert(“foo”&“bar”);显示零?

时间:2009-12-15 03:40:37

标签: javascript

我真的觉得这个标题足够彻底地解释了它。当我在一些字符串操作代码中使用&符号而不是加号时,我偶然发现了这种奇怪。发现它很有趣。有人可以帮我解释一下吗?

4 个答案:

答案 0 :(得分:14)

因为所有按位运算符 1 ,包括按位和(&),所以使用32位整数。

此运算符将使用抽象ToInt32运算 2 将两个操作数转换为带符号的32位整数,如果该值不是数字,此转换的结果为0

最后,您的表达式将被评估为:

0 & 0; // 0

参考文献:

  1. 二进制按位运算符 ECMA-262, 3rd. Ed.第11.10节

  2. ToInt32ECMA-262,第9.5节

答案 1 :(得分:1)

像许多语言一样,JavaScript有一点运算符& 这比较了相似位置的位,并在那些位置中的1位和1位返回1位,其中任何一位都有0位。

重要的是它返回0并不是因为没有位匹配,而是因为它不支持字符串。 :)

答案 2 :(得分:1)

& 是按位AND运算符(与&& 相对,它是逻辑AND运算符)。按位&对字符串没有任何意义,所以我认为JavaScript只是简单的方法并返回0。

可能有更多的技术性解释,但基本上你给了一个荒谬的指令,并得到了一个荒谬的结果。获得错误会更好,但JavaScript不是那种语言!

答案 3 :(得分:0)

这是一个按位&将其参数转换为数字。当您将任意字符串转换为数字,并且该字符串不包含数字文本时,结果为NaN。

NaN&的结果由于某种原因,NaN为0。

尝试“2”& “3”