Javascript二进制到十进制计算器

Javascript二进制到十进制计算器,javascript,binary,Javascript,Binary,我不知道为什么这个代码不起作用,有人能帮忙吗: toDecimal: function () { var counter = 0; var decimalValue = 0; for (var i = 7; i > 0; i--){ var binaryValue = self.binaryArray[i]; decimalValue += binaryValue * Math.pow(2, counter); cou

我不知道为什么这个代码不起作用,有人能帮忙吗:

toDecimal: function () {
    var counter = 0;
    var decimalValue = 0;
    for (var i = 7; i > 0; i--){
        var binaryValue = self.binaryArray[i];
        decimalValue += binaryValue * Math.pow(2, counter);
        counter++;
    }
    return decimalValue;
}
代码self.binaryArray只是一个数字数组,只包含8个字节,这就是我处理类似[0,0,0,0,1,1,1]

第二

你能提供一种更巧妙的方法来计算计数器吗?就我个人而言,我不知道如何从I值计算计数器,这应该不会太难,简单的数学


谢谢

为什么不直接使用JavaScript的内置功能呢

语法:parseIntstring,基数

var n=parseInt10001,2


n=17

您的原始循环从不处理二进制数组[0]。至于一种更巧妙的方法,假设binaryArray[0]是最重要的位,我会这样编写循环:

toDecimal: function () {
    var decimalValue = 0;
    for (var i = 0; i < 8; i++){
        decimalValue = (decimalValue << 1) + self.binaryArray[i];
    }
    return decimalValue;
}

变量self set在哪里?应该是最高有效位:binaryArray[0]还是binaryArray[7]?此外,循环终止条件需要为i>=0;否则,您永远不会处理binaryArray[0]上的值。为什么不使用parseInt转换它?二元结构,2;在父函数中,module.exports=函数{return{toDecimal:function{};};好的,那么变量自声明和初始化在哪里?我忘记了parseInt!:@No1_Melman-显式循环将更加高效,因此,如果性能非常关键,请避免使用join/parseInt方法。但还必须记住,按位操作将位大小限制为32。而另一种方法仅限于Javascript的最大整数精度,在本例@Xotic750中并不重要-你说得对。但是,可以简单地替换小数点是的,只是一个观察,它会在一定程度上改变性能,尽管循环速度更快;
toDecimal: function () {
    return parseInt(self.binaryArray.join(''), 2);
}