Js切换2变量总是执行第一种情况

时间:2016-06-15 10:16:47

标签: javascript switch-statement

我有两个变量:var1var2

我找到了这个答案https://stackoverflow.com/a/9235320/3917754我尝试在我的案例中实现它:

switch (var1 | var2) {
    case ('Contact' | true):
        $('#btnCopyCompanyAddress').removeClass('hidden');
        $('#btnCopyPersonalAddress').addClass('hidden');
        break;
    case ('Company' | true):
        $('#btnCopyCompanyAddress').addClass('hidden');
        $('#btnCopyPersonalAddress').removeClass('hidden');
        break;

    default:
        $('#btnCopyCompanyAddress, #btnCopyPersonalAddress').addClass('hidden');
    }

但即使var1 = Companyvar2 = true,也始终会执行第一种情况。

2 个答案:

答案 0 :(得分:0)

它始终与第一种情况相匹配,因为'any string string' | true === 1结果总是1

按位运算符将两个值都视为字符串,因此解析字符串结果NaN0true结果1。结果将计算为NaN | 1,结果为1。(如果值为NaNInfinity,则会将其转换为0

参考:Bitwise operations on non numbers

因此在这种情况下不起作用,而是尝试连接。



switch (var1 + var2) {
  case ('Contacttrue'):
    $('#btnCopyCompanyAddress').removeClass('hidden');
    $('#btnCopyPersonalAddress').addClass('hidden');
    break;
  case ('Companytrue'):
    $('#btnCopyCompanyAddress').addClass('hidden');
    $('#btnCopyPersonalAddress').removeClass('hidden');
    break;

  default:
    $('#btnCopyCompanyAddress, #btnCopyPersonalAddress').addClass('hidden');
}




答案 1 :(得分:0)

您可以使用“+”代替“|” :

function Check(var1, var2) {
    switch (var1 + var2) {
    case ('Contact' + var2):
        alert('1');
        break;
    case ('Company' + var2):
        alert('2');
        break;
    default:
        alert('0');
 }
}