在JavaScript中使用相同的输入调用时,Switch语句返回不同的结果

问题描述 投票:2回答:3

我正在为我的网站写一个Linux“控制台模拟器”作为复活节彩蛋。我使用switch语句处理给出的命令,如下:

function processCommand(command) {
    var args = command.split(" ");
    console.log(args[0]);
    var res;
    switch(args[0]) {
        case "ls":
            res = ls($(".line.new .directory", args[1], args[2]).text());
            break;
        default:
            res = args[0] + ": command not found";
    }
    $(".line.new .response").html(res);
}

这由以下JQuery调用:

$(document).keydown(function(e) {
    ...
    else if(e.which == 13) {
        $(".line.new").append('<div class="response"></div>');
        processCommand($(".line.new .input").text()); // <-------------
        $(".line").removeClass("new").addClass("old");
        $(".main").append(...);
    }
});

当我第一次给出输入“ls”时,一切都按预期运行,但是当第二次运行时,开关转到默认情况。 console.log(args[0])在第3行返回的值仍然相同。

难道我做错了什么?

编辑:

小提琴:https://jsfiddle.net/L90burfq/

javascript switch-statement
3个回答
2
投票

如果你检查args[0]的长度,你会看到它第一次是2个字符,第二次是3个字符。

在检查案例之前修改您的开关以修剪任何空白区域,它将起作用:

switch(args[0].trim())

1
投票

看到这个https://jsfiddle.net/wkjy7du2/

var args = command.split(" ");
    var arg =args[0];
    var res;
    switch(arg.trim()) {
        case "ls":
  1. 它有一些额外的空间,第二次click.so使用trim()
  2. 更好地声明为交换机验证的新变量

1
投票

如果你添加console.log({command});,你会看到从第二次调用函数开始,command的值以\r(回车符)开头。

作为一般规则,你应该在将command分割成单词之前修剪qazxswpoi,否则即使在第一次调用时它的值以空格开头也会失败。

© www.soinside.com 2019 - 2024. All rights reserved.