使用内置的javascript排序方法导致错误排序答案的前导零

时间:2017-11-12 09:46:48

标签: javascript sorting

我按字典顺序排序字符串/整数数组。
当我不得不使用array.sort对包含“022”的字符串进行排序时出现了一个案例。我不知道为什么它在打印时等于“18”等等。

var l = [022,12];
l.sort();
(2) [12, 18] => output

这背后的原因是什么以及如何纠正?

2 个答案:

答案 0 :(得分:1)

我建议"use strict";使022产生语法错误而不是八进制数:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Deprecated_octal

答案 1 :(得分:0)

这不是特定于排序的。如果您只是在控制台中键入022,那么您将返回18.这是因为022被解释为OctalIntegerLiteral,而不是DecimalLiteral。但情况并非总是如此。看一下documentation

  

请注意,十进制文字可以以零(0)开头,后跟另一个十进制数字,但如果前导0后的所有数字都小于8,则该数字将被解释为八进制数。这不会引用JavaScript,请参阅bug 957513。另请参阅有关parseInt()的页面。

编辑:要删除前导0并将022解释为十进制整数,您可以使用parseInt并指定基数:

parseInt("022", 10);
> 22