【发布时间】:2014-04-08 08:35:33
【问题描述】:
在 javascript 中,以下字符到字符二进制操作的测试打印 0 676 次:
var s = 'abcdefghijklmnopqrstuvwxyz';
var i, j;
for(i=0; i<s.length;i++){ for(j=0; j<s.length;j++){ console.log(s[i] | s[j]) }};
如果 js 使用的是字符串的实际二进制表示,我希望这里有一些非零值。
同样,测试字符串和整数的二元运算,下面分别打印 26 255s 和 0s。 (选择 255 是因为它是二进制的 11111111)。
var s = 'abcdefghijklmnopqrstuvwxyz';
var i; for(i=0; i<s.length;i++){ console.log(s[i] | 255) }
var i; for(i=0; i<s.length;i++){ console.log(s[i] & 255) }
javascript 在这里做什么?似乎javascript在二进制操作之前将任何字符串转换为false。
备注
如果你在 python 中尝试这个,它会抛出一个错误:
>>> s = 'abcdefghijklmnopqrstuvwxyz'
>>> [c1 | c2 for c2 in s for c1 in s]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for |: 'str' and 'str'
但是像这样的东西似乎work in php。
【问题讨论】:
-
规范将解释转换。 es5.github.io/#x11.10具体
toInt32()转换在这里:es5.github.io/#x9.5 -
谢谢@cookie-monster。该注释源非常清楚地表明,在隐式类型转换中
toNumber产生NaN,然后在NaN上调用ToInt32产生+0。
标签: javascript binary