字符串不是函数

String is not a function

本文关键字:函数 字符串      更新时间:2023-09-26

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

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

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

q(i) 

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

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


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

q(i)使用

参数 i 调用函数q

q[i] 得到字符串 q 的第 i 个字符。

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

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

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

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

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

你可以在一行中完成

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

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