Javascript 应用toString()时更改的数值
在测试一个检查数字有效性的函数时,我注意到了一个非常奇怪的现象,我首先是在测试'number.toString()[0]'时注意到的。如果我控制台记录(fLetter(019272));“0”始终显示“1”。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
联机检查后,我找不到与对包含“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