反转字符串大小写

3

我正在尝试编写一个函数,将字符串中的所有小写字母改为大写字母,所有大写字母改为小写字母,例如 "lower UPPER" 将被翻译成 "LOWER upper"

这是我的代码:

var convertString = function (str){
var s = '';
var i = 0;
while (i < str.length) {
    var n = str.charAt(i);
        if (n == n.toUpperCase()) {
            n = n.toLowerCase;
        }
        else {
            n = n.toUpperCase;
        }

 i +=1; 
 s += n;

}
return s;
};
convertString("lower UPPER");

我正在使用这个网站进行工作,但输出了一个相当奇怪的信息。

这是我运行后出现的图片。


1
'lower UPPER'.replace(/./g, c => c === c.toUpperCase() ? c.toLowerCase() : c.toUpperCase()) - zerkms
2个回答

6
你的大部分内容都是正确的,除了你的if语句内部。你将n设置为它的toLowerCasetoUpperCase 方法,而不是它们的返回值。你需要调用这些方法并将n设置为它们的返回值:
var convertString = function (str) {
    var s = '';
    var i = 0;
    while (i < str.length) {
        var n = str.charAt(i);
        if (n == n.toUpperCase()) {
            // *Call* toLowerCase
            n = n.toLowerCase();
        } else {
            // *Call* toUpperCase
            n = n.toUpperCase();
        }

        i += 1;
        s += n; 
    }
    return s;
};

convertString("lower UPPER");

你得到的输出结果 ('function toUpperCase() { [native code] }...) 是每个方法被转换为字符串,然后与你的结果字符串连接而成的。你可以通过在控制台中运行以下命令来获得相同的结果:

  • console.log("".toUpperCase);
  • console.log("".toUpperCase.toString());

两者的结果都是 function toUpperCase() { [native code] }

祝编程愉快!


我认为在这种情况下使用for循环更加优雅。 - Amarjeet Singh Rai

3

使用ES6语法:

您可以使用JavaScript提供的ES6功能,这将减少源代码:

const convertString = str => [...str].map(char => char === char.toUpperCase() ? char.toLowerCase() : char.toUpperCase()).join('');

console.log(convertString("lower UPPER"));


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接