Javascript,为什么被视为八进制
我将一个id作为参数传递给一个javascript函数,因为它来自UI,它是零填充的。但它似乎有(也许)“奇怪”的行为Javascript,为什么被视为八进制,javascript,Javascript,我将一个id作为参数传递给一个javascript函数,因为它来自UI,它是零填充的。但它似乎有(也许)“奇怪”的行为 console.log(0000020948); //20948 console.log(0000022115); //9293 which is 22115's octal console.log(parseInt(0000022115, 10)); // 9293 which is 22115's octal console.log
console.log(0000020948); //20948
console.log(0000022115); //9293 which is 22115's octal
console.log(parseInt(0000022115, 10)); // 9293 which is 22115's octal
console.log(0000033959); //33959
console.log(20948); //20948
console.log(22115); //22115
console.log(33959); //33959
我如何确保它们正在解析到正确的numebr?(十进制)
编辑:
说清楚一点:
这些数字来自服务器,是零填充字符串。我为每一个都做了一个删除按钮
比如:
function printDelButton(value){
console.log(typeof value); //output string
return '<a href="#" onclick="deleteme('+value+')"><img src="images/del.png"></a>'
}
and
function printDelButton(value){
console.log(typeof value); //output numeric
console.log(value); //here output as octal .... :S
}
仍然解析为八进制如果以0开头,它将被解释为八进制数 看 请注意本文的警告: 你永远不应该在数字前面加零,除非你是 特别是寻找一个八进制转换 考虑在此处查找有关移除导线的想法:
前导
0
s表示数字为八进制
parseInt
解析包含数字的字符串。parseInt(0000022115,10)
传递一个数字文本。JS解释器以八进制解析文本,因此您将原始数值传递给parseInt
,除非您可以截取此数字的字符串版本,否则您就倒霉了
这就是说,如果您可以获得八进制的字符串版本(调用toString()
将无济于事),这将起作用:
parseInt(variable_string.replace(/^0+/, ''), 10);
试一试
这应该只给你去除零的数字(如果你必须支持小数,你需要编辑以解释“.”,当然,“.”也很有趣……我真的希望你不必处理欧洲人写数字的各种疯狂方式!)如果你将参数作为字符串对象接收,它应该可以使用
parseInt(string, 10)
将字符串解释为十进制,即使它们以0开头
在测试中,您向parseInt方法传递了一个数字,而不是一个字符串,这可能就是它不返回预期结果的原因
试一试
而不是
parseInt(0000022115, 10)
这对我来说确实返回了221115。如果数字是以零填充字符串的形式来自服务器,则使用
+“0000022115”
console.log(+“0000022115”)
if(021<019)console.log('Paradox')
不要用零填充数字,而要用空格。为什么用户界面用0填充数字?在脚本中使用“use strict”
指令可能是个好主意。这将导致任何八进制文字的使用都会抛出错误,这将使调试更容易!关于parseInt(00000221115,10)
:您仍在传递一个数字作为第一个参数,这使得JavaScript首先转换该数字,然后将其传递给parseInt
。而是传递一个字符串。如果要从创建新元素,则否;只需使用parseInt(str,10)
或parseFloat
。问题是他有一个字面意思。我更新了这个问题。它们是来自服务器的零填充字符串。@Kossel-所以在JavaScript中删除字符串中的零。
parseInt(string, 10)
parseInt('0000022115', 10)
parseInt(0000022115, 10)