我按字典顺序排序字符串/整数数组。
当我不得不使用array.sort对包含“022”的字符串进行排序时出现了一个案例。我不知道为什么它在打印时等于“18”等等。
var l = [022,12];
l.sort();
(2) [12, 18] => output
这背后的原因是什么以及如何纠正?
答案 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