2

我不断在第五行收到“字符串不是函数”错误。

    function SwapCase(str) { 
    var words = []
    var q = str   
      for (var i = 0; i<q.length; i++) {
          if (q(i) === q(i).toLowerCase) {
           var upper = q(i).toUpperCase
              words.push(upper)
         };
         else {
             var lower = q(i).toLowerCase
                 words.push(lower)
         };
       };
     words.join
       return words;

    };
    SwapCase("HeleEer")

对于缺少分号和其他空格和缩进错误,我仍然是编码的菜鸟。

4

4 回答 4

7
q(i) 

这是一个函数调用,但q它是一个字符串,而不是一个函数。

您可以使用数组索引从字符串中获取单个字符:q[i]


另外,您可能想要调用toLowerCaseandtoUpperCase函数。
此外,words.join没有效果,有两个原因。

于 2013-07-24T02:12:54.310 回答
4

q(i)调用q带有参数的函数i

q[i]获取 string 的i第 - 个字符q

这段代码中还有其他一些错误,但这q(i)是您报告错误的原因(即没有调用函数toLowerCase, toUpperCase, join)。

尽管 JavaScript 不会让您编写分号,但这样做是个好主意,因为您可能会在意想不到的情况下被一些奇怪的错误所困扰。

编辑:哦-说到分号,你不能在之前写一个else。事实上,你根本不应该在右大括号之后写它们。您在语句之后而不是在块之后编写它们,这与原始帖子中的内容几乎相反。

于 2013-07-24T02:13:14.910 回答
3

首先,您需要使用string.toLowerCase()and string.toUpperCase()。注意括号。

其次,您应用这些方法的任何对象都必须是一个字符串 - 例如q(或者q[i]如果这是您需要的,如 SLaks 建议的那样)。q(i)在 . 上调用函数q()(不存在)i

于 2013-07-24T02:13:00.347 回答
0

你可以在一行中完成

function SwapCase(str) {
for (x = ""; x.length < str.length; x += String.fromCharCode((str.charCodeAt(x.length) - 65 + 32) % 64 + 65));
return x;
}

我使用 ascii 代码和一点数学来转换它而不使用 if 语句

于 2013-07-24T02:52:11.647 回答