Javascriptstring/整数比较

我在HTML中存储了一些客户端参数,然后需要将它们作为整数进行比较。 不幸的是,我遇到了一个我无法解释的严重错误。 该错误似乎是我的JS阅读参数作为string而不是整数,导致我的整数比较失败。

我已经产生了一个错误的例子,我也无法解释。 以下内容在运行时返回“true”:

javascript:alert("2">"10") 

使用parseInt将stringparsing为一个整数:

 javascript:alert(parseInt("2", 10)>parseInt("10", 10)) 

检查string是整数是比较分开比较,如果一个是大于或小于另一个。 你应该总是比较数字和string与string作为处理混合types不容易记住的algorithm。

 '00100' < '1' // true 

因为它们都是string,因此只有'00100'的第一个零与'1'进行比较,并且由于charCode较低,所以评估值较低。

然而:

 '00100' < 1 // false 

因为RHS是一个数字,所以在比较之前将LHS转换成数字。

一个简单的整数检查是:

 function isInt(n) { return /^[+-]?\d+$/.test(n); } 

如果n是一个数字或整数,则无关紧要,它将在testing之前转换为string。

如果你真的关心性能,那么:

 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,'')); } }()); 

一旦testing通过,转换为数字比较可以使用一些方法。 我不喜欢parseInt(),因为它会截断浮动,使它们看起来像整数,所以以下所有将是“平等”:

 parseInt(2.9) == parseInt('002',10) == parseInt('2wewe') 

等等。

一旦数字被testing为整数,您可以使用一元+运算符在比较中将它们转换为数字:

 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 

没有使用parseInt比较数字string等价物

 console.log(Number('2') > Number('10')); console.log( ('2'/1) > ('10'/1) ); var item = { id: 998 }, id = '998'; var isEqual = (item.id.toString() === id.toString()); isEqual; 

使用parseInt并比较如下:

 javascript:alert(parseInt("2")>parseInt("10")) 

答案很简单。 把string除以1.例子:

 "2" > "10" - true 

 "2"/1 > "10"/1 - false 

你也可以检查string的值是否真的是数字:

 !isNaN("1"/1) - true (number) !isNaN("1a"/1) - false (string) !isNaN("01"/1) - true (number) !isNaN(" 1"/1) - true (number) !isNaN(" 1abc"/1) - false (string) 

 !isNaN(""/1) - true (but string) 

 number !== "" && !isNaN(number/1) 

alert()想要显示一个string,所以它会将“2”>“10”解释为一个string。

使用以下内容:

 var greater = parseInt("2") > parseInt("10"); alert("Is greater than? " + greater); var less = parseInt("2") < parseInt("10"); alert("Is less than? " + less);