在查看parseInt(string, radix)中:https :
//developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/parseInt
13除此以外,所有示例都非常合理。
根据一个示例,parseInt(015, 10)将返回13。假设以0开头的数字被视为八进制,10这与在基数位置出现的数字无关,这是有道理的。
因此,如果在问题标题中指定了八进制:
parseInt(021, 8)
那么为什么不17(相15对于Mozilla文档和我在jsfiddle中的测试)呢?
任何见识将不胜感激。
Kai*_*ido 18
这是因为,0n就是八进制在JavaScript中,就像Oxn是16进制:
console.log(021 === 0x11 && 021 === 17);Run Code Online (Sandbox Code Playgroud)
所以你写的东西被评估为 parseInt(17, 8);
然后,将这17个数字强制转换为字符串"17",结果为15。
console.log(parseInt(17, 8))Run Code Online (Sandbox Code Playgroud)
请注意,0n在不赞成使用符号的严格模式下,所有这些事情都不会发生:
(function(){
"use strict";
// Syntax Error
console.log(parseInt(015, 8))
})();Run Code Online (Sandbox Code Playgroud)
Ger*_*ado 12
的第一个参数parseInt应为字符串。相同的MDN链接显示:
要解析的值。如果string参数不是字符串,则将其转换为字符串(使用ToString抽象操作)。
您可以看到这按预期工作:
console.log(parseInt("021", 8))Run Code Online (Sandbox Code Playgroud)
测试中的问题是您使用的是数字,而不是字符串。021如您所知,当您将其用作数字时(当您说“以0开头的数字被视为八进制”时),它将转换为"17":
console.log(021.toString())Run Code Online (Sandbox Code Playgroud)
这样您就可以看到结果:
console.log(parseInt("17", 8))Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
998 次 |
| 最近记录: |