Javascript 应用toString()时更改的数值

Javascript 应用toString()时更改的数值,javascript,tostring,number-formatting,Javascript,Tostring,Number Formatting,在测试一个检查数字有效性的函数时,我注意到了一个非常奇怪的现象,我首先是在测试'number.toString()[0]'时注意到的。如果我控制台记录(fLetter(019272));“0”始终显示“1”。 联机检查后,我找不到与对包含“0”的数字使用toString()方法相关的任何问题 function numberValidate(number) { var numCheck = [0, 5, 7, 8, 9]; var fLetter = number

在测试一个检查数字有效性的函数时,我注意到了一个非常奇怪的现象,我首先是在测试'number.toString()[0]'时注意到的。如果我控制台记录(fLetter(019272));“0”始终显示“1”。
联机检查后,我找不到与对包含“0”的数字使用toString()方法相关的任何问题

function numberValidate(number) {

        var numCheck = [0, 5, 7, 8, 9];
        var fLetter = number.toString()[0];

        if (number.match(/^\d{6}$/)) {
            for (var i = 0; i < 5; i++) {
                if (fLetter == numCheck[i]) {
                    return false;
                } else {
                    return true;
                }
            } 
        } 

    } 

有人能解释我为什么要返回这些值吗?谢谢

数字是数字的64位浮点表示形式。它不将数字作为字符数组保存,因此前导零不可用。字符串包含一个字符数组,因此前导0不会丢失

JavaScript允许在可能的情况下进行透明类型转换,因此字符串“0111”==可以转换为数字111。因此,如果您编写代码“0111”==111,它将返回true


Javascript提供了两个相等运算符==和严格相等运算符===第二个运算符要求两边都是相同的类型,因此
Number(111)==String(“111”)
将返回false,因为它们不是相同的类型。这同样适用于不等式运算符
!=还有==

数字是数字的64位浮点表示形式。它不将数字作为字符数组保存,因此前导零不可用。字符串包含一个字符数组,因此前导0不会丢失

JavaScript允许在可能的情况下进行透明类型转换,因此字符串“0111”==可以转换为数字111。因此,如果您编写代码“0111”==111,它将返回true


Javascript提供了两个相等运算符==和严格相等运算符===第二个运算符要求两边都是相同的类型,因此
Number(111)==String(“111”)
将返回false,因为它们不是相同的类型。这同样适用于不等式运算符
!=还有==

010被视为八进制表示法,因为前导0,而0x10将被视为十六进制表示法。八进制数字系统使用数字0到7。因此,019给出19,因为9不是八进制数字。以下是一些十进制数字及其八进制符号:

11 | 5 | 9 11 | 13 15
2  2 | 6  6 | 10 12 | 14 16
3  3 | 7  7 | 11 13 | 15 17
4  4 | 8 10 | 12 14 | 16 20
正如你所看到的,因为我们只有8个数字可用(0,1,2,3,4,5,6,7),8变成10,16(8+8)变成20(10+10)。为了让事情变得更清楚,让我们看看如何用10位数字(像往常一样)然后用8位数字进行计数

使用10位数字:

0,1,2,3,4,5,6,7,8,9,不再有数字
不管怎样,将1添加到十分之一,然后从0重新启动
10、11、12、13、14、15、16、17、18、19,不再有数字
不管怎样,将1添加到十分之一,然后从0重新启动
20、21等。。。
使用8位数字:

0,1,2,3,4,5,6,7,不再有数字
无论如何,将1添加到“十分之一”,然后从0重新启动
10,11,12,13,14,15,16,17,没有更多的数字
无论如何,将1添加到“十分之一”,然后从0重新启动
20、21等。。。
这同样适用于二进制数:

0,1,不再有数字
10,11,没有更多的数字
100,101,没有更多的数字
110,111,没有更多的数字
1000等等。。。
让我们与十进制表示法进行比较:

11 | 5 101 | 9 1001
2   10 | 6  110 | 10 1010
3   11 | 7  111
4  100 | 8 1000

相关内容::-)

010被视为八进制表示法,因为前导的0,以及0x10将被视为十六进制表示法。八进制数字系统使用数字0到7。因此,019给出19,因为9不是八进制数字。以下是一些十进制数字及其八进制符号:

11 | 5 | 9 11 | 13 15
2  2 | 6  6 | 10 12 | 14 16
3  3 | 7  7 | 11 13 | 15 17
4  4 | 8 10 | 12 14 | 16 20
正如你所看到的,因为我们只有8个数字可用(0,1,2,3,4,5,6,7),8变成10,16(8+8)变成20(10+10)。为了让事情变得更清楚,让我们看看如何用10位数字(像往常一样)然后用8位数字进行计数

使用10位数字:

0,1,2,3,4,5,6,7,8,9,不再有数字
不管怎样,将1添加到十分之一,然后从0重新启动
10、11、12、13、14、15、16、17、18、19,不再有数字
不管怎样,将1添加到十分之一,然后从0重新启动
20、21等。。。
使用8位数字:

0,1,2,3,4,5,6,7,不再有数字
无论如何,将1添加到“十分之一”,然后从0重新启动
10,11,12,13,14,15,16,17,没有更多的数字
无论如何,将1添加到“十分之一”,然后从0重新启动
20、21等。。。
这同样适用于二进制数:

0,1,不再有数字
10,11,没有更多的数字
100,101,没有更多的数字
110,111,没有更多的数字
1000等等。。。
让我们与十进制表示法进行比较:

11 | 5 101 | 9 1001
2   10 | 6  110 | 10 1010
3   11 | 7  111
4  100 | 8 1000

相关资料::-)

那么,实际问题是什么?请参阅(阅读说明,其中说明«如果基数未定义(…)»谢谢-我现在正在阅读。那么,实际问题是什么?请参阅(阅读说明,其中说明«如果基数未定义(…)»谢谢-我现在正在阅读。
var numTest = 00000000;
var numTest1 = 20203020;
var numTest2 = 011000110100;
var numTest3 = 01928;
var numTest4 = 012345;

console.log(numTest);     //Returned 0
console.log(numTest1);    //Returned 20203020
console.log(numTest2);    //Returned 1207996480
console.log(numTest3);    //Returned 1928
console.log(numTest4);    //Returned Returned 5349