Javascript字符串/整数比较

时间:2011-04-12 03:34:06

标签: javascript html

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

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

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

9 个答案:

答案 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" )