【问题标题】:Cant get indexOf statement to work无法使 indexOf 语句起作用
【发布时间】:2016-03-12 20:02:24
【问题描述】:

最终我提示用户猜测,然后最终更改,因此无论用户输入什么,它总是将第一个字母大写并将其余字母小写。 (我这样做是因为如果用户输入猜测,则字符串将匹配或不匹配数组中的值。)我尝试使用 for 语句来使用循环计数器(我正在寻找 3 个总猜测)。但是,当我尝试使用 indexOf 检查数组时,我不断在包含 indexOf 语句的行上收到“意外令牌”错误。所以问题是(1)我在这行代码中做错了什么?

//declare variables
var sportsArray = new Array("Football", "Basketball", "Rollerblading",   "Hiking", "Biking", "Swimming");
var name = prompt("Enter your name");
var loops = 0;
var score = 0;
var sGuess = prompt("enter your sport guess");

// uses substrings to ultimately capitalize the 1st letter, and make everything after it lowerCase.

var sFirstPart = sGuess.substr(0, 1);
var sFirstCap = sFirstPart.toUpperCase();
var sSecondPart = sGuess.substring(1, sGuess.length);
var sSecondLow = sSecondPart.toLowerCase();
var usableGuess = sFirstCap + sSecondLow;

while(loops < 4){

    if(sportsArray.indexOf(usableGuess) = 0 { 
        document.write("nice guess");
        loops++;
    }else { 
        document.write("loser");
        loops++;
    }
}

【问题讨论】:

  • = 是赋值,== 是相等。另外,你没有关闭你的if(..)paren
  • 感谢 Crayon 修复了它......不敢相信我“再次”忽略了语法谢谢。
  • 为什么不使用String#toLowerCase()

标签: javascript indexof


【解决方案1】:

这适用于检查整个数组:

var sportsArray = new Array("Football", "Basketball", "Rollerblading",   "Hiking", "Biking", "Swimming");
var name = prompt("Enter your name");
var loops = 0;
var score = 0;
var sGuess = prompt("enter your sport guess");

// uses substrings to ultimately capitalize the 1st letter, and make everything after it lowerCase.

var sFirstPart = sGuess.substr(0, 1);
var sFirstCap = sFirstPart.toUpperCase();
var sSecondPart = sGuess.substring(1, sGuess.length);
var sSecondLow = sSecondPart.toLowerCase();
var usableGuess = sFirstCap + sSecondLow;

while(loops < 4){

    if(sportsArray.indexOf(usableGuess) > -1) { 
        document.write("nice guess");
        loops++;
    }else { 
        document.write("loser");
        loops++;
    }
}

您想使用 indexOf(guess) > -1 来检查猜测是否存在于数组的任何索引处。如果只检查一个索引位置,它将是 indexOf(guess) == 0。

【讨论】:

    【解决方案2】:

    sportsArray.indexOf(usableGuess) === 0) 而不是sportsArray.indexOf(usableGuess) = 0

    用左侧的常量检查相等性是一个很好的做法。它会在大多数浏览器中抛出异常:

    var a = 3;
    if (12 = a) { // throws ReferenceError: invalid assignment left-hand side in Firefox
      //do something
    }
    

    另外:使用提供静态代码分析的工具。 js 的jslint.comjshint.com 是一个不错的选择。也有明确的 IDE 插件(使用这两个或更多),请参阅Is there a working JSLint Eclipse plug-in?

    【讨论】:

    • 我一定会检查这些工具,非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多