Javascript字符串/整数比较

Ron*_*arp 46 html javascript

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

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

javascript:alert("2">"10")
Run Code Online (Sandbox Code Playgroud)

ick*_*fay 76

使用parseInt以下方法将字符串解析为整数:

javascript:alert(parseInt("2", 10)>parseInt("10", 10))
Run Code Online (Sandbox Code Playgroud)

  • +1快速_and_将基数传递给`parseInt`. (5认同)
  • @Ronan:你实际上可以将一个int作为第一个参数传递给`parseInt`.`parseInt`将其第一个参数转换为字符串(如果它不是一个),然后解析它.但是,如果你真的需要检查某些东西是否为int,你通常可以使用`typeof 123`并检查`"number"的结果.但是,如果你传入`new Number(123)`,这会有问题,在这种情况下它将返回``object``,但这并不常见. (3认同)

Rob*_*obG 26

如果一个字符串大于或小于另一个字符串,则检查字符串是否为整数是分开的.您应该始终将数字与数字和字符串与字符串进行比较,作为处理不容易记住的混合类型的算法.

'00100' < '1' // true
Run Code Online (Sandbox Code Playgroud)

因为它们都是字符串,所以只将'00100'的第一个零与'1'进行比较,因为它的charCode较低,所以它的评估值较低.

然而:

'00100' < 1 // false
Run Code Online (Sandbox Code Playgroud)

由于RHS是一个数字,LHS在比较之前转换为数字.

一个简单的整数检查是:

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

如果n是数字或整数并不重要,它将在测试之前转换为字符串.

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

var isInt = (function() {
  var re = /^[+-]?\d+$/;

  return function(n) {
    return re.test(n);
  }
}());
Run Code Online (Sandbox Code Playgroud)

注意到像1.0这样的数字将返回false.如果你想将这样的数字计算为整数,那么:

var isInt = (function() {
  var re = /^[+-]?\d+$/;
  var re2 = /\.0+$/;

  return function(n) {
    return re.test((''+ n).replace(re2,''));
  }
}());
Run Code Online (Sandbox Code Playgroud)

一旦通过该测试,转换为数字进行比较可以使用多种方法.我不喜欢parseInt(),因为它会截断浮点数使它们看起来像int,所以以下所有内容都是"相等的":

parseInt(2.9) == parseInt('002',10) == parseInt('2wewe')
Run Code Online (Sandbox Code Playgroud)

等等.

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

if (isInt(a) && isInt(b)) {
  if (+a < +b) {
    // a and b are integers and a is less than b
  }
}
Run Code Online (Sandbox Code Playgroud)

其他方法是:

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
Run Code Online (Sandbox Code Playgroud)


Cod*_*ody 15

不使用时将数字与字符串等价进行比较 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;
Run Code Online (Sandbox Code Playgroud)

  • 无论数字有多大,这个方法都更好:)谢谢 (2认同)

Eme*_*eus 6

+运算符会将字符串强制转换为数字。

console.log( +"2" > +"10" )
Run Code Online (Sandbox Code Playgroud)


Sen*_*hil 5

使用parseInt和比较如下:

javascript:alert(parseInt("2")>parseInt("10"))
Run Code Online (Sandbox Code Playgroud)


Bim*_*mar 5

永远记住当我们比较两个字符串时。比较是基于字符进行的。所以 '2' > '12' 是真的,因为比较将发生为 '2' > '1' 并且按字母顺序,'2' 总是大于 '1' 作为 unicode。所以它会成真。我希望这有帮助。


小智 5

您也可以使用Number()函数,因为它将对象参数转换为表示对象值的数字。

例如:javascript:alert( Number("2") > Number("10"))