字符串不是函数

时间:2013-07-24 02:11:39

标签: javascript

我继续在第五行得到“字符串不是函数”错误。

    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")

我仍然是编写抱怨遗漏的分号和其他间距和缩进错误的noobie。

4 个答案:

答案 0 :(得分:7)

q(i) 

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

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


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

答案 1 :(得分:4)

q(i)使用参数q调用函数i

q[i]获取字符串i的{​​{1}}个字符。

这段代码还有其他问题,但q是您报告错误的原因(即调用函数q(i)toLowerCasetoUpperCase)。

虽然JavaScript不会让你写分号,但是这样做是个好主意,因为当你不期望它时,你会被一些奇怪的错误所困扰。

编辑:哦 - 说到分号,你不能在join之前写一个分号。事实上,你根本不应该在结束括号后写它们。你在语句之后写它们,而在块之后不是,与原始帖子中的相反。

答案 2 :(得分:3)

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

其次,无论你使用这些方法的对象必须是一个字符串 - 例如q(或q[i],如果你需要它,就像SLaks建议的那样)。 q(i)q()上调用函数i(不存在)。

答案 3 :(得分: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语句