Javascript if语句在应该为true时返回false

时间:2018-04-09 05:56:43

标签: javascript if-statement console.log

我不明白为什么temp变量只返回false。我试过==只是为了看看是否使用严格的比较是问题,但它没有改变。只是为了仔细检查,我通过在控制台中打印它们的类型来确保变量属于同一类型。

正在发生的另一件奇怪的事情是,当我使用这一行console.log('temp = ' + temp);来查看temp内部的内容时,只会打印一个空格。但是,如果我使用console.log(temp);,它将打印temp中存储的内容。 console.log('temp = ' + temp);似乎已修复了自己,所以永远不要回答这个问题,但它仍然没有返回真。

var upFormData = formData.toUpperCase();
console.log('Form Data: ' + upFormData);
degrees[str] = [];
degrees[str][0] = data[0];

for(var i = 1; i < data.length; i++)
{
    var temp = data[i][5].toUpperCase();
    console.log(temp);
    //console.log('temp = ' + temp);
    console.log('upFormData = ' + upFormData + ' ' + typeof upFormData + ' ' + typeof temp);

    if(upFormData === temp)
    {
        console.log('MATCH');
    }
    else
    {
        console.log('NOT A MATCH');
        //console.log(temp);
        //console.log('upFormData = ' + upFormData + ' ' + typeof upFormData + ' ' + typeof temp);
    }

此脚本的结果:

enter image description here

有人可以帮忙解释一下我在做什么吗?如果您需要更多信息,请告诉我。

编辑:

enter image description here

1 个答案:

答案 0 :(得分:1)

您希望检查表单(formData)中输入的值是否在data数组中。

使用some

var upFormData = formData.trim().toUpperCase();
var hasFormData = data.some( s => s[5].trim().toUpperCase() === upFormData ); //hasFormData will return true if any value matches

如果您想要filter data个与forData值匹配的值,请使用filter

var matchedData = data.filter( s => s[5].trim().toUpperCase() === upFormData );