Javascript转换语句损坏?

时间:2019-08-01 16:03:04

标签: javascript reactjs switch-statement

我现在很困惑。我在React中有一个简单的switch语句,其行为异常,我也不知道为什么。

检查一下:

alterHandler(keyName, value, profileType){
    const newState = Object.assign({}, this.state);
    console.log('inside alterHandler in Profile')
    console.log('value of profileType: ', profileType)
    console.log('profileType equals local: ', profileType=='local')
    console.log('profileType equals db: ', profileType=='db')
    switch (profileType){
      case 'local':
        console.log('23235235235123523t2346 case local')
        newState['local'][keyName] = value;
      case 'db':
        console.log('23235235235123523t2346 case db')
        newState['db'][keyName] = value;
      case 'n/a':
        newState[keyName] = value;
      default:
        if(keyName=='animalType'){
          newState['showForward'] = true;
        }
        this.setState(newState, ()=>{
          console.log('after setting state in alterHandler 
          in Profile and value: ', this.state)
        });
    }
  }

如果我使用

调用alterHandler
onChange={(e)=>{this.props.alterHandler('personalName', e.target.value, 'local')}} 

在输入语句中,

我得到以下输出:

 value of profileType:  local index.js:216
 profileType equals local:  true index.js:217
 profileType equals db:     false index.js:218
 case local index.js:221
 case db  index.js:224

因此,即使profileType是'local',情况“ db”仍在触发!

在广泛的体育世界中,这里正在发生什么?

2 个答案:

答案 0 :(得分:1)

请查看switch documentation on MDN。具体来说,本节:

  

与每个case标签关联的可选break语句可确保一旦执行了匹配的语句,程序便会退出切换,并在切换后的语句处继续执行。如果省略break,则程序将在switch语句中的下一个语句处继续执行。

因此,如果您不执行t add a中断clause, the program will not exit the开关scope and the默认操作,因为它不知道子句已经匹配。

答案 1 :(得分:0)

使用switch语句创建case时,switch将遍历所有个案,直到找到正确的个案为止。一旦发现这种情况,它将从那里开始执行代码。问题在于,除非您break退出switch语句,否则它只会继续处理其他情况。

在您的switch语句中

    switch (profileType){
      case 'local':

它在本地执行所有操作,然后继续执行db,因为您没有break;