!(not) 运算符在 switch case 中的用法

usage of !(not) operator in switch case

// checking whether a number is a multiple of 3 or not 
for (let number = 1; number <= 100; number++) {
  switch (number % 3) {
    case !0: // Here I have used !(not) but it's not helping, I only want to know why '!' is not helping           
      console.log(`${number} is not multiple of 3`);
      break;

    default:
      console.log(`${number} is multiple of 3`)
  }
}

这里第一种情况不起作用。代码执行没有问题,但第一种情况根本没有帮助。完整的流程仅转到 'default:' 代码块。每当余数不等于0时,应该执行第一种情况的代码块,但它总是转到默认代码块。

!0 等于 true,不等于 12.

考虑这样写:

for (let number = 1; number <= 100; number++) {
 switch (number % 3) {
  case 0:
   console.log(`${number} is multiple of 3`)
   break;
  default:
   console.log(`${number} is not multiple of 3`);
 }
}

在 JS 中,0 被认为是 falsy,这就是为什么 !0 将等于 true(不是 falsy)。

至于你的开关,你可以反转你的开关并使用true作为开关值。这些案例将有表达式来检查

for (let number = 1; number <= 100 ;number++ ) {
   switch (true) {
     case number % 3:        
         console.log(`${number} is not multiple of 3`); 
     break;

     default:
         console.log(`${number} is multiple of 3`)
  }
}

你不能这样做,因为 !0 在 JavaScript 中总是 true 所以循环总是在第一种情况下进入

这样试试

for (let number = 1; number <= 100 ;number++ ) {
  if(number % 3){
    console.log(`${number} is not multiple of 3`); 
  }
  else{
    console.log(`${number} is multiple of 3`); 
  }
}

switch 语句接收 case 语句的值,而不是像 if 这样的表达式。因此,当 js 运行 你的代码时,它会将 !0 评估为 true (假值的倒数为真)。

您必须将开关替换为 ifelses:

for (let number = 1; number <= 100 ;number++ ) {
    if ((number % 3) !== 0) {
         console.log(`${number} is not multiple of 3`); 
    } else {
         console.log(`${number} is multiple of 3`)
    }
}

但是如果你反转逻辑你仍然可以使用 switch case 语句:

for (let number = 1; number <= 100 ;number++ ) {
   switch (number % 3) {
     case 0:      
         console.log(`${number} is multiple of 3`)
     break;
     default:
         console.log(`${number} is not multiple of 3`); 
  }
}

但在这种情况下使用 switch case 确实没有任何意义,因为 if-else 更简单易读。