2013-07-24 54 views
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") 

我仍然是编码对不起遗漏分号和其他间距和缩进错误编号。

+0

做你打算进军使用q.charAt(我),而不是q(i)<这是不正确的 –

回答

7
q(i) 

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

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


另外,你可能想调用toLowerCasetoUpperCase功能。
另外,words.join不起作用,原因有两个。

3

首先,您需要使用string.toLowerCase()string.toUpperCase()。请注意括号。其次,无论您将这些方法应用于哪个对象都必须是字符串 - 例如q(或q[i],如果这是您所需要的,就像SLaks建议的那样)。 q(i)呼叫功能q()(不存在)i

+0

现在我觉得很愚蠢。 – user2562240

4

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

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

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

尽管JavaScript并没有让你写分号,但尽管如此,你也可以在不期望的时候被一些奇怪的错误咬伤。

编辑:哦 - 说分号,你不能在else之前写一个。事实上,你不应该在大括号之后写下它们。你在语句后面写下它们,并且而不是之后的块,与原始文章中的内容几乎相反。

+0

+1分号 – Trojan

0

你可能只是做它在一个行中使用ASCII码与数学的一点点把它转换

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

林不使用if语句

+0

对于非字母字符,这将失败。 – SLaks