JavaScript - 如果循环中的语句出现问题

时间:2018-03-24 13:06:36

标签: javascript for-loop if-statement

function rot13(str) { 

var yahoo = [];

for (var i = 0; i < str.length; i++) {
    if (str.charCodeAt(i) > 64 && str.charCodeAt[i] < 91){continue;}{
        var cnet = str.charCodeAt(i);
        yahoo.push(cnet);
    } else {
      var j = str.charCodeAt(i);
        yahoo.push(j);
    }
}

var ugh = yahoo.toString();
return ugh;
}

rot13("SERR PBQR PNZC");

尝试在for循环中使用if else语句并且在else语句中遇到一些问题(Getting&#34;语法错误:其他意外的令牌&#34;)。现在的主要目标是尝试操纵字符串字母字符,同时传递其他字符(即空格,感叹号等)。当然有一种更简单的方法可以做到这一点,但实际上只是想知道在循环中写一个if else语句和我出错的问题是什么。感谢帮助

3 个答案:

答案 0 :(得分:5)

您的if

后面有两个代码正文
if (str.charCodeAt(i) > 64 && str.charCodeAt[i] < 91)
  {continue;}   // actual body of the if

  { // just a random block of code
    var cnet = str.charCodeAt(i);
    yahoo.push(cnet);
  }

第二个根本不属于if,因为if只能获得一个代码块。这就是为什么else是“意外”的原因。

答案 1 :(得分:0)

您正在尝试在完成if语句后调用语句。在您致电if之前,您的continue;会生成else,然后会执行其他操作。尝试重构continue;。它与for循环没有任何关系:)

答案 2 :(得分:0)

  

尝试在for循环中使用if else语句并在else语句中遇到一些问题(Getting&#34;语法错误:其他意外的令牌&#34;)。

     

但实际上只是想知道在循环中写一个if else语句和我出错的地方有什么问题

您没有编写if..else语句,而是if语句和代码块,您尝试添加else语句;这个别的说法在那里没有意义。

您的代码如下所示:

//this is your condition
if (str.charCodeAt(i) > 64 && str.charCodeAt[i] < 91){
    continue;
}

//and this is an anonymous code block; anonymous, because you could name it
{
    var cnet = str.charCodeAt(i);
    yahoo.push(cnet);

//and such code-blocks have no `else`,
//that's why you get the error, 
//this else doesn't belong to the condition above
} else {
    var j = str.charCodeAt(i);
    yahoo.push(j);
}

你的问题是{continue;}部分,它会将你的积木的全部内容改为我所描述的内容

  

当然有一种更简单的方法

是的,您可以使用String#replace,并将a-m替换为n-z,反之亦然

&#13;
&#13;
//a little helper
const replace = (needle, replacement) => value => String(value).replace(needle, replacement);

//the definition of `rot13` as a String replacement
const rot13 = replace(
  /[a-m]|([n-z])/gi, 
  (char,down) => String.fromCharCode(char.charCodeAt(0) + (down? -13: 13))
);

let s = "SERR PBQR PNZC";
console.log("input: %s\noutput: %s", s, rot13(s));
&#13;
&#13;
&#13;

说明:match[0]始终包含整个匹配的字符串,此处为char;并且我在[n-z]周围添加了一个小组,以便match[1]也称为down。当角色是n-z时填充down,但如果角色是a-m则不填充。

因此我知道,如果填写char.charCodeAt(0) - 13,我必须char.charCodeAt(0) + 13否则void main() { }