javascript - Javascript Switch 语句损坏?
问题描述
我现在很困惑。我在 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)
});
}
}
如果我用
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
是“本地”,案例“db”也会触发!
在广阔的体育世界里发生了什么?
解决方案
请查看switch
MDN 上的文档。具体来说,本节:
与每个 case 标签关联的可选
break
语句确保程序在执行匹配的语句后跳出 switch,并在 switch 后面的语句处继续执行。如果break
省略,则程序继续执行 switch 语句中的下一条语句。
因此,如果您不t add a
中断clause, the program will not exit the
switch scope and the
default` 操作,它将运行,因为它不知道子句已经匹配。
推荐阅读
- angular - 使用路由器插座时向 Angular 母版页注入组件
- php - WP - 根据帖子类别隐藏特定的 div
- xamarin - Xamarin 使用 CrossSimpleAudioPlayer 播放声音
- linux - FusionPBX安装502 Bad Gateway
- wordpress - 如何更改 woocommerce 描述标签名称
- blockchain - 如何使用 Waves IDE 为资产设置脚本?
- ios - 如何在使用 ESTabBarController 执行操作时推送控制器
- javascript - 如何使构造函数原型可枚举?
- python - Amazon S3:提取大型二进制文件部分的快速方法?
- wpf - 在 WPF 中加载的控件上显示焦点元素