0

I have 2 variables : var1 and var2.

I found this answer https://stackoverflow.com/a/9235320/3917754 I try to implement it in my case :

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');
    }

but always first case is executed even if var1 = Company and var2 = true.

Community
  • 1
  • 1
demo
  • 6,038
  • 19
  • 75
  • 149

2 Answers2

0

It will always match the first case since 'any string string' | true === 1 results always 1.

Bitwise operators treated both value as string so parsing string result NaNor 0 and true result 1. The result would be calculates as NaN | 1, which results 1.(If the value is NaN or Infinity, it's converted to 0)

Refer : Bitwise operations on non numbers

So that would not work in this case, instead try concatenation.

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');
}
Community
  • 1
  • 1
Pranav C Balan
  • 113,687
  • 23
  • 165
  • 188
0

You can use "+" instead of "|" :

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