javascript 如果数字大于数字

IT技术 javascript forms
2021-03-04 16:21:38

我有这个 javascript 函数来验证一个数字是否大于另一个数字

function validateForm() {
    var x = document.forms["frmOrder"]["txtTotal"].value;
    var y = document.forms["frmOrder"]["totalpoints"].value;

    if (x > y) {
        alert("Sorry, you don't have enough points");
        return false;
    }
}

由于某种原因它不起作用。

如果我这样做,alert(x)我得到 1300,并alert(y)给出 999

这有效....

function validateForm() {
    var x = 1300;
    var y = 999;

    if (x > y) {
        alert("Sorry, you don't have enough points");
        return false;
    }
}
4个回答

您应该在比较之前将它们转换为数字。

尝试:

if (+x > +y) {
  //...
}

或者

if (Number(x) > Number(y)) {
  // ...
}

注意: parseFloatpareseInt(用于比较整数,并且您需要指定基数)将为您NaN提供一个空字符串,与NaN总是比较false,如果您不想将空字符串视为 be0,那么您可以使用它们。

你在比较字符串。JavaScript 比较字符串中每个字符的 ASCII 码。

要了解为什么会出错,请查看 charCodes:

"1300".charCodeAt(0);
49
"999".charCodeAt(0);
57

比较错误,因为在比较字符串时,1 的字符代码不大于 9 的字符代码。

解决方法是将字符串视为数字。您可以使用多种方法:

parseInt(string, radix)
parseInt("1300", 10);
> 1300 - notice the lack of quotes


+"1300"
> 1300


Number("1300")
> 1300

您可以使用 Number 构造函数“强制转换”为数字。

var number = new Number("8"); // 8 number

您还可以调用 parseInt 内置函数:

var number = parseInt("153"); // 153 number
哦!,你是对的@RobG 关于“==”!..我测试了这些情况并且很好,并且我认为 Number 对象总是隐式地调用“toString()”(实际上,我认为在内部它的调用 valueOf() 方法): new Number('725') < new Number ('800'); //输出真 new Number('91') > new Number('90'); //输出真 new Number('7') < new Number('7'); //输出假 new Number('7') > new Number('8'); //输出假 new Number('8') < new Number('7'); //输出false 但是对于equals,这样,你需要: new Number('7').valueOf() == new Number('7').valueOf(); //输出真
2021-04-20 16:21:38
哎呀,使用 Number 作为构造函数返回一个 Number 对象,并且一个对象只与自身“相等”,因此new Number('7') == new Number('7')返回false. 我认为您打算将其用作函数,因此Number('7') == Number('7'). 并且parseInt应该始终使用基数:parseInt('153',10)
2021-04-21 16:21:38

做这个。

var x=parseInt(document.forms["frmOrder"]["txtTotal"].value);
var y=parseInt(document.forms["frmOrder"]["totalpoints"].value);
指定您想要以 10 为底的 ...]["txtTotal"].value, 10);
2021-05-11 16:21:38