简体   繁体   中英

Switch…case in JS

This simple problem gives me an error. Does not get the correct answer. I will be glad if you help.

let point = 90;
switch (point) {
    case point >= 51 && point <= 60:
        console.log('Your price: E');
        break;
    case point >= 61 && point <= 70:
        console.log('Your price: D');
        break;
    case point >= 71 && point <= 80:
        console.log('Your price: C');
        break;
    case point >= 81 && point <= 90:
        console.log('Your price: B');
        break;
    case point >= 91 && point <= 100:
        console.log('Your price: A');
        break;
    default:
        console.log('You did not pass');
}

Output: You did not pass

this way

 let point = 90; switch (true) { case point >= 51 && point <= 60: console.log('Your price: E'); break; case point >= 61 && point <= 70: console.log('Your price: D'); break; case point >= 71 && point <= 80: console.log('Your price: C'); break; case point >= 81 && point <= 90: console.log('Your price: B'); break; case point >= 91 && point <= 100: console.log('Your price: A'); break; default: console.log('You did not pass'); }

can you explain why we write true ? – Hussein Nadjafli (PO)

The JS switch only works on strict equality.

switch (A) {
   case ‘x1’: ...
   case ‘x2’: ...

is equivalent to

if       (A === ’x1’) { ...
else if  (A === ’x2’) { ...

in your code you replace the possible values ['x1','x2',...] with an evaluation like

(point >= 61 && point <= 70)

which returns either true or false
so your code becomes:

if       (A === (point >= 51 && point <= 60)) { ...
else if  (A === (point >= 61 && point <= 70)) { ...

by replacing the A by true you therefore have a comparison between:

if       (true === (point >= 51 && point <= 60)) { ...
else if  (true === (point >= 61 && point <= 70)) { ...

You can also do:

 function codePrice(val) { let code = 'ABCDE'[10 - Math.ceil(val / 10)] return (?:code): `Your price. ${code}` :'You did not pass' } console.log( codePrice(90) )

Can also be simplified:

 let point = 90; switch (true) { case point < 51: console.log('You did not pass'); break; case point < 61: console.log('Your price: E'); break; case point < 71: console.log('Your price: D'); break; case point < 81: console.log('Your price: C'); break; case point < 91: console.log('Your price: B'); break; default: console.log('Your price: A'); break }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM