我在客户端将一些参数存储在HTML中,然后需要将它们作为整数进行比较。不幸的是,我遇到了一个我无法解释的严重错误。bug似乎是我的JS将参数作为字符串而不是整数读取,导致我的整数比较失败。
我生成了一个错误的小例子,我也无法解释。运行时,以下返回“true”:
javascript:alert("2">"10")
检查字符串是否为整数与比较一个大于或小于另一个是分开的。您应该始终将number与number以及string与string进行比较,作为处理不易记忆的混合类型的算法。
'00100' < '1' // true
因为它们都是字符串,所以只有'00100'的第一个0与'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(),因为它会截断浮点,使它们看起来像int,所以下面的所有内容都将是“相等的”:
parseInt(2.9) == parseInt('002',10) == parseInt('2wewe')
等等。
一旦数字被测试为整数,您就可以在比较中使用unary+运算符将其转换为数字:
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
使用parseint
将字符串解析为整数:
javascript:alert(parseInt("2", 10)>parseInt("10", 10))
我已经声明了一个实现可比较接口和compareTo方法的类,使用employee ID比较两个员工。创建的类对象插入数组列表。现在,当我使用collections.sort(arrayList对象)时,它工作得很好。我对collective和comparator接口之间的比较有何不同感到困惑。我想知道如何在纯粹由数字组成的employee id字符串和其他字符串employee id之间进行比较,
问题内容: 我有一个String和一个int,可以说:和。什么是如果它们是相同的,看到的最快的方法还是(或者是有一个更快的方法?)? 这是Integer.parseInt和String.equals的源代码 问题答案: 会比 首先将num转换为O(n)的字符串,其中n是数字中的位数。然后它将再次进行字符串连接O(n),然后最终进行字符串比较。在这种情况下,字符串比较将是另一个O(n)-n是数字中的
问题内容: 如何在JavaScript中将字符串转换为整数? 问题答案: 最简单的方法是使用本机函数: 如果这对您不起作用,则有 parseInt , 一元加号 , 带有floor的parseFloat 和 Math.round 方法。 parseInt: 一元加号,如果您的字符串已经是整数形式: 如果您的字符串是浮点数或可能是浮点数,并且您想要一个整数: 或者,如果您要多次使用Math.floo
请你来实现一个 atoi 函数,使其能将字符串转换成整数。 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。 当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。 该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽
问题内容: 我听说散列(即将字符串或对象转换为数字)用于字符串等,因为比较数字比字符串更容易。如果为真,这是什么原因? 问题答案: 不一定是这种情况,但大多数时候可能是这样。 请考虑以下情况: 我想比较字符串“ apples”和“ oranges”。如果我只想确定“ apples” ==“ oranges”,我只需要比较每个字符串的第一个字符:’a’!=’o’=>“ apples”!=“ oran
问题内容: 我从书中看到以下代码: 但没有提到为什么“一个”大于“四个”。我试过了,它小于a和b。我想知道JavaScript如何比较这些字符串。 问题答案: 因为和许多编程语言一样,字符串是按字典顺序进行比较的。 你可以认为这是一个空想家版本的字母顺序,区别在于字母排序仅覆盖了26个字符通过。