当数值相同时,Javascript中的字符串比较失败。

问题描述 投票:0回答:1

我有一个函数,它接收一个缩写的月份名称,并返回它的数值,例如五月返回5。

或者说它应该是这样的。问题是无论我怎么尝试,字符串比较总是失败。

var monthNames = [
    "JAN", "FEB", "MAR",
    "APR", "MAY", "JUN", "JUL",
    "AUG", "SEP", "OCT",
    "NOV", "DEC"
];

function getMonthNum(val) {
    for (var i = 0; i < monthNames.length; i++) {
        if (val.toUpperCase() == monthNames[i].toUpperCase()) {
            return parseInt(i + 1);
        }
    }
    return 0;
}

如果传入的val是May,它永远不会通过 "MAY"=="MAY "的比较,每次都失败。

如何让 "MAY"=="MAY"?

我修改了代码,把两个值都转换成字符串,修剪了,去掉了空格,什么都不行。

函数最终变成了下面的样子,但IT STILL FAILS并返回0,不知为何 "MAY "永远不等于 "MAY"。

function getMonthNum(val) {
    var mon = val.toUpperCase().trim().toString().replace(/\s/g, ' ');
    for (var i = 0; i < monthNames.length; i++) {
        var check = monthNames[i].toUpperCase().trim().toString().replace(/\s/g, ' ');
        if (String(mon) == String(check)) {
            return parseInt(i + 1);
        }
    }
    return 0;
}
javascript
1个回答
2
投票

由于你不能对输入的数据有信心,你可以尝试在你的函数中删除所有非字母。

val.replace(/[^A-Za-z]/gi, '')

3
投票

MAY 我建议使用 indexOf?

var monthNames = [
    "JAN", "FEB", "MAR",
    "APR", "MAY", "JUN", "JUL",
    "AUG", "SEP", "OCT",
    "NOV", "DEC"
];

function getMonthNum(val) {
  return monthNames.indexOf(val.toUpperCase()) + 1
}

console.log(getMonthNum("MAY")); //5
console.log(getMonthNum("maY")); //5
console.log(getMonthNum("JUN")); //6
console.log(getMonthNum("wrong")); //0
© www.soinside.com 2019 - 2024. All rights reserved.