2013-07-24 109 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