javascript中的切换条件很奇怪

use*_*999 5 javascript switch-statement

我发现下面这两个是等价的,但是退出奇怪的是,单个=不是关系运算符而是赋值运算符,为什么它在第二个运算符?

第一:

switch (true) 
  {
    case color == 'green':case color == 'red':case color == 'blue':case color == 'pink':
      alert('colorful')
      break;
    case color == 'black':case color == 'white':
      alert('classical')
      break;
    default:
      alert('dull')
      break;              
  }
Run Code Online (Sandbox Code Playgroud)

第二:

switch (color) 
  {
    case color = 'green':case color = 'red':case color = 'blue':case color = 'pink':
      alert('colorful')
      break;
    case color = 'black':case color = 'white':
      alert('classical')
      break;
    default:
      alert('dull')
      break;              
  }
Run Code Online (Sandbox Code Playgroud)

Ore*_*aki 8

在第一个switch语句中检查boolean值.所以有效的结果将是truefalse.

对于第二个switch语句,我们正在搜索颜色.赋值的结果是它自己的赋值.

color = 'green'将返回green并将完全像写作,case 'green':除了它也将改变的值color. 但是,这是一个很大但是,你正在改变价值,color同时检查什么color和那可能会导致大的副作用.

您最好使用正确的正式样式case 'green':而不是其他变体.特别是没有assignment变化.

  • 颜色的值似乎并不总是改变:`var color ='red'; 开关(颜色){case color ='green':case color ='red':case color ='pink':break; }; console.log(color); //'red'.将初始化切换为''blue'`,按预期得到'粉红'.很有意思. (2认同)