Javascript比较运算符字符串和数字

时间:2018-01-19 01:55:55

标签: javascript

我在if / else语句中练习比较运算符。我的问题是,我希望窗口会给我True提醒,但它会给我False提醒。我认为系统会在执行比较之前将num1强制转换为97。

这是我的代码:

var num1 = "a";
var num2 = 99999;

if (num1 <= num2) {
   window.alert("True");
}else {
   window.alert("False");
}

4 个答案:

答案 0 :(得分:1)

我相信你的问题的答案与这里发生的隐式转换有关。请考虑以下代码行:

console.log(99999 + "a")

这将输出99999a,并且不会将"a"字符串转换为数字。假设您的代码片段也是如此,它解释了观察结果。我们所看到的与此一致:

var num1 = "a";
var num2 = "99999";

if (num1 <= num2) {
    console.log("True");
} else {
    console.log("False");
}

这是错误的原因是字母a在字典上大于任何单个数字字符。由于JavaScript正在比较两个字符串,因此它们按文本排序,第一个字符是需要检查以呈现排序的所有字符。

答案 1 :(得分:0)

您可以使用.codePointAt()获取字符的代码点

var num1 = "a";
var num2 = 99999;

if (num1.codePointAt(0) <= num2) {
   window.alert("True");
} else {
   window.alert("False");
}

答案 2 :(得分:0)

以上条件翻译为

    if(parseInt(num1)<= parseInt(num2)) {
      //something
    }

parseInt(num1)返回NaN(非数字),根据定义,NaN不小于,等于或大于任何其他数字。 因此输出是错误的。

答案 3 :(得分:0)

num1 =“a”是一个字符串,在比较中num1&lt; = num2,num2是一个数字。 这里发生隐式转换,num2转换为字符串。 有几种方法可以将字符串(类型为“345”等)转换为数字:

Number()
parseInt()
parseFloat()
bitwise ~~

但字符串num1包含一个字符,因此这些函数返回NaN(非数字)。因此我们无法将字符串转换为数字。

您的目的可以使用charCodeAt()函数实现,如下所示:

var num1="a";
var num2=9999;
if(num1.charCodeAt(0)<=num2){
window.alert("True");
}else{
window.alert("False");
}