我将一些参数客户端存储在HTML中,然后需要将它们作为整数进行比较。不幸的是,我遇到了一个我无法解释的严重错误。该错误似乎是我的JS将参数读取为字符串而不是整数,导致我的整数比较失败。
我已经生成了一个错误的小例子,我也无法解释。运行时,以下内容返回'true':
javascript:alert("2">"10")
答案 0 :(得分:74)
使用parseInt
将字符串解析为整数:
javascript:alert(parseInt("2", 10)>parseInt("10", 10))
答案 1 :(得分:26)
如果一个字符串大于或小于另一个字符串,则检查字符串是否为整数是分开的。你应该总是将数字与数字和字符串与字符串进行比较,作为处理不易记住的混合类型的算法。
'00100' < '1' // true
因为它们都是字符串所以只有'00100'的第一个零与'1'进行比较,并且因为它的charCode较低,所以评估为较低。
然而:
'00100' < 1 // false
由于RHS是一个数字,因此在比较之前将LHS转换为数字。
一个简单的整数检查是:
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
答案 2 :(得分:10)
parseInt
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;
答案 3 :(得分:5)
使用parseInt
并进行比较,如下所示:
javascript:alert(parseInt("2")>parseInt("10"))
答案 4 :(得分:2)
答案很简单。只需将字符串除以1。 例子:
"2" > "10" - true
但
"2"/1 > "10"/1 - false
您还可以检查字符串值是否真的是数字:
!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)
答案 5 :(得分:2)
alert()想要显示一个字符串,因此它会将“2”&gt;“10”解释为字符串。
使用以下内容:
var greater = parseInt("2") > parseInt("10");
alert("Is greater than? " + greater);
var less = parseInt("2") < parseInt("10");
alert("Is less than? " + less);
答案 6 :(得分:1)
您还可以使用Number()
函数,因为它将对象参数转换为代表对象值的数字。
例如:javascript:alert( Number("2") > Number("10"))
答案 7 :(得分:0)
总是记住当我们比较两个字符串时。 比较发生在汉字基础上。 所以'2'>'12'是正确的,因为比较将发生 “ 2”>“ 1”,并且按字母顺序,“ 2”始终大于Unicode的“ 1”。 所以它会成真。 我希望这会有所帮助。
答案 8 :(得分:0)
+
运算符会将字符串强制转换为数字。
console.log( +"2" > +"10" )