Javascript 字符串/整数比较

IT技术 javascript html
2021-01-27 14:44:11

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

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

javascript:alert("2">"10")
6个回答

使用parseInt以下命令将字符串解析为整数

javascript:alert(parseInt("2", 10)>parseInt("10", 10))
如果参数是一个数字字符串,那么 parseFloat(param) == param
2021-03-31 14:44:11
极好的。是否还有一种方法可以首先检查值是否为 int,这样我就可以尽量避免在最后出现更多错误...
2021-04-01 14:44:11
@Ronan:您实际上可以将 int 作为第一个参数传递给parseInt. parseInt如果它不是一个字符串,则将它的第一个参数转换为一个字符串,然后解析它。但是,如果您确实需要检查某些内容是否为 int,则通常可以使用typeof 123并检查"number". 但是,这可能会出现问题,如果您传入new Number(123),在这种情况下它将返回"object",但这并不常见。
2021-04-03 14:44:11
@Ronan:哦,您也可以检查constructor属性,并将其与Number. 这似乎在两种情况下都有效。
2021-04-03 14:44:11

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

'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
一元 + 运算符是快速均质化的救星 - 感谢您的提示。
2021-03-16 14:44:11

在不使用的情况下将数字与字符串等价物进行比较 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;
这只效果最好。您不需要强制转换任何内容 + 以确保所有内容都已保存,请检查您要比较的值是否为undefined/ null(如果您确实保存了未定义/空值并比较了两个未定义/空值)。
2021-03-22 14:44:11
无论数字有多大,这个方法都更好:)谢谢
2021-04-01 14:44:11
哪个是你的首选?.toString()Number构造函数,还是算术?为什么?
2021-04-01 14:44:11

使用parseInt和比较如下:

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

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