为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript字符串/整数比较

JavaScript字符串/整数比较

守着一只汪 2019-07-20 14:09:54
JavaScript字符串/整数比较我将客户端的一些参数存储在HTML中,然后需要将它们作为整数进行比较。不幸的是,我遇到了一个严重的错误,我无法解释。错误似乎是,我的JS将参数读入字符串而不是整数,导致我的整数比较失败。我已经生成了一个小的错误例子,我也无法解释。运行时,以下内容返回“true”:javascript:alert("2">"10")
查看完整描述

4 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

将字符串解析为整数parseInt:

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


查看完整回答
反对 回复 2019-07-20
?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

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

'00100' < '1' // true

因为它们都是字符串,所以只有‘00100’的第一个零与‘1’相比较,而且因为它的字符代码较低,所以它的计算值较低。

然而:

'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()因为它会截断浮点数,使它们看起来像INT,所以以下所有内容都是“相等”的:

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


查看完整回答
反对 回复 2019-07-20
?
慕容森

TA贡献1853条经验 获得超18个赞

将数字与字符串等效项进行比较,而不使用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;


查看完整回答
反对 回复 2019-07-20
  • 4 回答
  • 0 关注
  • 766 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信