我有一个包含64个元素的JavaScript数组,我将其用作位掩码。不幸的是,当进行字符串转换为二进制和再次转换回字符串时,我遇到了问题。尽管这对于其他一些数组有效,但在这里发生了什么?
var a = [1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 0, 0, 1, 1, 1, 1,
1, 1, 0, 0, 1, 1, 1, 1,
1, 1, 0, 0, 0, 0, 1, 1,
1, 1, 0, 0, 0, 0, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1];
var str1 = a.join('');
//-> '1111111111111111110011111100111111000011110000111111111111111111'
var str2 = parseInt(str1, 2).toString(2);
//-> '1111111111111111110011111100111111000011110001000000000000000000'
str1 === str2 //-> false
我希望
str2
和str1
是相同的,但事实并非如此。
18446691089982423040
和18446691089982423039
。(正如@zie所说的精度问题) - Brigandfunction matchMask(str, pos) { return str.charAt(pos) != '0'; }
这样的方法呢? - AlxandrmatchMask
稍显低效。 - Marcus Booster