我继续在第五行得到“字符串不是函数”错误。
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。
答案 0 :(得分:7)
q(i)
这是一个函数调用,但q
是一个字符串,而不是一个函数。
您可以使用数组索引从字符串中获取单个字符:q[i]
。
另外,您可能想要调用toLowerCase
和toUpperCase
函数
另外,words.join
没有效果,原因有两个。
答案 1 :(得分:4)
q(i)
使用参数q
调用函数i
。
q[i]
获取字符串i
的{{1}}个字符。
这段代码还有其他问题,但q
是您报告错误的原因(即不调用函数q(i)
, toLowerCase
,toUpperCase
)。
虽然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语句