Ответ 1
Разделите строку на целое число с помощью parseInt
:
javascript:alert(parseInt("2", 10)>parseInt("10", 10))
Я храню некоторые параметры клиентской стороны в HTML, а затем вам нужно сравнить их как целые числа. К сожалению, я столкнулся с серьезной ошибкой, которую я не могу объяснить. Кажется, что ошибка заключается в том, что мой JS считывает параметры как строки, а не целые числа, что приводит к сбою моих целых сравнений.
Я создал небольшой пример ошибки, которую я также не могу объяснить. Следующий результат возвращает "true" при запуске:
javascript:alert("2">"10")
Разделите строку на целое число с помощью parseInt
:
javascript:alert(parseInt("2", 10)>parseInt("10", 10))
Проверка того, что строки являются целыми, является раздельным для сравнения, если один больше или меньше другого. Вы всегда должны сравнивать число с числом и строкой со строкой, поскольку алгоритм для работы со смешанными типами не так легко запомнить.
'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(), потому что он будет обрезать float, чтобы они выглядели как ints, поэтому все следующие будут "равными":
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 clear what is happening
a * 1 // Not really obvious but it works, I don't like it
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;
используйте parseInt
и сравните, как показано ниже:
javascript:alert(parseInt("2")>parseInt("10"))
Ответ прост. Просто разделите строку на 1. Примеры:
"2" > "10" - true
но
"2"/1 > "10"/1 - false
Также вы можете проверить, действительно ли строковое значение является числом:
!isNaN("1"/1) - true (number)
!isNaN("1a"/1) - false (string)
!isNaN("01"/1) - true (number)
!isNaN(" 1"/1) - true (number)
!isNaN(" 1abc"/1) - false (string)
Но
!isNaN(""/1) - true (but string)
Решение
number !== "" && !isNaN(number/1)
Предупреждение() хочет отобразить строку, поэтому она будет интерпретировать "2" > "10" в виде строки.
Используйте следующее:
var greater = parseInt("2") > parseInt("10");
alert("Is greater than? " + greater);
var less = parseInt("2") < parseInt("10");
alert("Is less than? " + less);
Всегда помните, когда мы сравниваем две строки. сравнение происходит на основе характера. поэтому '2'> '12' истинно, потому что сравнение будет происходить как '2'> '1', а в алфавитном порядке '2' всегда больше, чем '1' в юникоде. ТАК это получится правдой. Надеюсь, это поможет.