我将一些参数客户端存储在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)
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)
使用parseInt
和比较如下:
javascript:alert(parseInt("2")>parseInt("10"))
Run Code Online (Sandbox Code Playgroud)
永远记住当我们比较两个字符串时。比较是基于字符进行的。所以 '2' > '12' 是真的,因为比较将发生为 '2' > '1' 并且按字母顺序,'2' 总是大于 '1' 作为 unicode。所以它会成真。我希望这有帮助。
归档时间: |
|
查看次数: |
105167 次 |
最近记录: |