检查字符串是否为整数与比较一个大于或小于另一个是分开的。您应该始终将数字与数字和字符串与字符串进行比较,因为处理混合类型的算法不容易记住。
'00100' < '1' // true
因为它们都是字符串,所以只有 '00100' 的第一个零与 '1' 进行比较,并且因为它的 charCode 较低,它的计算结果为较低。
但是:
'00100' < 1 // false
由于右轴是一个数字,所以左轴在比较之前转换为数字。
一个简单的整数检查是:
function isInt(n) {
return /^[+-]?\d+$/.test(n);
}
n是数字还是整数都没有关系,在测试之前都会转换成字符串。
如果你真的关心性能,那么:
var isInt = (function() {
var re = /^[+-]?\d+$/;
return function(n) {
return re.test(n);
}
}());
请注意,像 1.0 这样的数字将返回 false。如果你也想把这样的数字算作整数,那么:
var isInt = (function() {
var re = /^[+-]?\d+$/;
var re2 = /\.0+$/;
return function(n) {
return re.test((''+ n).replace(re2,''));
}
}());
一旦该测试通过,转换为数字进行比较可以使用多种方法。我不喜欢 parseInt() 因为它会截断浮点数以使它们看起来像整数,所以以下所有内容都是“相等的”:
parseInt(2.9) == parseInt('002',10) == parseInt('2wewe')
等等。
一旦将数字作为整数进行测试,您可以使用一元 + 运算符将它们转换为比较中的数字:
if (isInt(a) && isInt(b)) {
if (+a < +b) {
// a and b are integers and a is less than b
}
}
其他方法有:
Number(a); // liked by some because it's clear what is happening
a * 1 // Not really obvious but it works, I don't like it