Javascript开关语句-非常简单,我做错了什么?

Javascript开关语句-非常简单,我做错了什么?,javascript,switch-statement,Javascript,Switch Statement,我相信一定有一个非常简单的答案,但冒着听起来愚蠢的风险——我无法让这个switch语句起作用。输入变量“status”可以是“public”或“draft”,我可以向您保证,它只保存这两个值中的一个,因为我在各个阶段都提醒过它,无论如何,这里的if语句是有效的。看一看: function switch_status(status){ if (status == 'public'){ return false;

我相信一定有一个非常简单的答案,但冒着听起来愚蠢的风险——我无法让这个switch语句起作用。输入变量“status”可以是“public”或“draft”,我可以向您保证,它只保存这两个值中的一个,因为我在各个阶段都提醒过它,无论如何,这里的if语句是有效的。看一看:

        function switch_status(status){
            if (status == 'public'){
                return false;
            } if (status == 'draft') {
                return true;
            }
^这是可行的,但用下面的“switch”语句替换“if”是行不通的

            switch(status){
            case 'public':
                return false;
            case 'draft':
                return true;
            }
        }
第一个给我提供不可避免的令人尴尬的简单答案的人赢得了我的赞誉

编辑:这是我的全部代码-

        $('.status').live('click',
                function(){
                    fullClass = $(this).attr('class');
                    id = fullClass.split(' ').slice(-1);
                    status = fullClass.split(' ').slice(-2,-1);
                    var newStatus = switch_status(status);
                    alert(newStatus);
            });

        function switch_status(status){
//              if (status == 'public'){
//                  return false;
//              } if (status == 'draft') {
//                  return true;
//              }

            switch(status){
                case 'public':
                    return false;
                case 'draft':
                    return true;
            }
        }

您正在将
状态
作为一个字符串数组(切片的结果)传递,而不仅仅是一个字符串

当检查数组和字符串之间的相等性时,似乎是强制导致了相等性检查的工作。但强制不会发生在switch语句中

如果我改变

status = fullClass.split(' ').slice(-2,-1);


然后它就可以正常工作了。

我怀疑这个问题是由类型转换引起的

Javascipt通常是一种松散类型的语言。前面使用的if语句使用了松散的
==
比较。这很管用


然而,switch语句是另一回事。要使案例匹配,数据类型必须匹配。换句话说,
状态
必须先转换为字符串,然后才能传递给switch语句。

我在jquery循环中使用了.each,并将值与“this”进行比较;如果使用console.log,我可以清楚地看到“this”的值是正确的。它在if/else逻辑中工作,但在开关/案例逻辑中失败

解决办法是:

var obj=this.toString()

switch(obj){
    case 'one': ...
    case 'two': ...
}

通过将“this”强制为字符串类型,开关中的逻辑现在可以工作

使用
开关时是否报告了错误?一些上下文代码可能也会有帮助-没有发布任何内容表明存在问题。请尝试在最后一个case(默认值:return)之后添加默认代码块false@g.d.d.c我刚刚用完整的代码附加了这个问题。警报显示“未定义”,但当用“如果”替换“开关”时,我得到了正确的返回值。。。(!??)@Inrbob谢谢,我试过了,但现在我每次都会被错误修改回来(即switch语句仍然没有识别任何一个“case”中的两个值),这不是学究式的,但它是一个简单的老JavaScript switch语句,给你带来了麻烦——没有jQuery特有的东西。@JacobM哈哈哈,你这个舞蹈家!谢谢那么,如果我没有偏离这个问题的边界太远,你会如何将它转换为字符串?(仅作总结)谢谢。@Jacob-真漂亮。非常感谢。作为一种教人钓鱼的方法,我是这样找到答案的:萤火虫。我将一块手表设置为status(状态)并仔细查看代码,发现它是一个数组。Firebug应该始终是您遇到javascript问题时使用的第一个工具。
switch(obj){
    case 'one': ...
    case 'two': ...
}