应用 toString() 时数值发生变化
Number values changing when toString() applied
我在测试我的一个检查数字有效性的函数时注意到一些非常奇怪的事情,我在测试 '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;
}
}
}
}
我尝试在应用和不应用 toString() 方法的情况下检查其他一些测试变量,但得到了一些我无法理解的结果。 **注意 - toString() 添加产生相同的结果(在 JSfiddle 中执行)
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
任何人都可以阐明为什么我要返回这些值吗?谢谢
数字是数字的 64 位浮点表示形式。它不将数字保存为字符数组,因此前导零不可用。字符串包含一个字符数组,因此不会丢失前导 0
如果可能,JavaScript 允许透明类型转换,因此字符串“0111”== 到数字 111。因此,如果您编写代码 "0111" == 111
,它将 return 为真。
Javascript 提供了两个相等运算符 == 和严格相等运算符 === 第二个要求两边是同一类型所以 Number(111) === String("111")
将 return false不是同一类型。这同样适用于不等式运算符 != and !==
010 由于前导 0 而被视为八进制符号,而 0x10 将被视为十六进制符号。八进制数字系统使用数字 0 到 7。因此,019 给出 19,因为 9 不是八进制数字。这里有一些十进制数及其八进制符号:
1 1 | 5 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, no more digits
nevermind, add 1 to the tenths and restart from 0
10, 11, 12, 13, 14, 15, 16, 17, 18, 19, no more digits
nevermind, add 1 to the tenths and restart from 0
20, 21, etc...
使用 8 位数字:
0, 1, 2, 3, 4, 5, 6, 7, no more digits
nevermind, add 1 to the "tenths" and restart from 0
10, 11, 12, 13, 14, 15, 16, 17, no more digits
nevermind, add 1 to the "tenths" and restart from 0
20, 21, etc...
同样适用于二进制数:
0, 1, no more digits
10, 11, no more digits
100, 101, no more digits
110, 111, no more digits
1000, etc...
我们用十进制来比较一下:
1 1 | 5 101 | 9 1001
2 10 | 6 110 | 10 1010
3 11 | 7 111
4 100 | 8 1000
相关内容: :-)
我在测试我的一个检查数字有效性的函数时注意到一些非常奇怪的事情,我在测试 '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;
}
}
}
}
我尝试在应用和不应用 toString() 方法的情况下检查其他一些测试变量,但得到了一些我无法理解的结果。 **注意 - toString() 添加产生相同的结果(在 JSfiddle 中执行)
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
任何人都可以阐明为什么我要返回这些值吗?谢谢
数字是数字的 64 位浮点表示形式。它不将数字保存为字符数组,因此前导零不可用。字符串包含一个字符数组,因此不会丢失前导 0
如果可能,JavaScript 允许透明类型转换,因此字符串“0111”== 到数字 111。因此,如果您编写代码 "0111" == 111
,它将 return 为真。
Javascript 提供了两个相等运算符 == 和严格相等运算符 === 第二个要求两边是同一类型所以 Number(111) === String("111")
将 return false不是同一类型。这同样适用于不等式运算符 != and !==
010 由于前导 0 而被视为八进制符号,而 0x10 将被视为十六进制符号。八进制数字系统使用数字 0 到 7。因此,019 给出 19,因为 9 不是八进制数字。这里有一些十进制数及其八进制符号:
1 1 | 5 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, no more digits
nevermind, add 1 to the tenths and restart from 0
10, 11, 12, 13, 14, 15, 16, 17, 18, 19, no more digits
nevermind, add 1 to the tenths and restart from 0
20, 21, etc...
使用 8 位数字:
0, 1, 2, 3, 4, 5, 6, 7, no more digits
nevermind, add 1 to the "tenths" and restart from 0
10, 11, 12, 13, 14, 15, 16, 17, no more digits
nevermind, add 1 to the "tenths" and restart from 0
20, 21, etc...
同样适用于二进制数:
0, 1, no more digits
10, 11, no more digits
100, 101, no more digits
110, 111, no more digits
1000, etc...
我们用十进制来比较一下:
1 1 | 5 101 | 9 1001
2 10 | 6 110 | 10 1010
3 11 | 7 111
4 100 | 8 1000
相关内容: :-)