JavaScript中switch判断容易犯错的一个细节


Posted in Javascript onAugust 27, 2014

switch语句与if语句的关系最为密切,也是其它编程语言中普遍使用的一种流程控制语句,但switch的匹配是全等模式,如果不注意这个细节则写程序时往往会出错。

代码:

var n = '5';
switch(n){
    case 5:
        alert('执行case分支');
        break;
    default:
        alert('执行default分支');
}

结果:

JavaScript中switch判断容易犯错的一个细节

可能很多人会误以为以上程序会走case分支,结果却走了default分支。难道它们两个不相等吗?我们使用if语句看看。

代码:

var n = '5';
if(n==5){
    alert('真 分支');
}else{
    alert('假 分支');
}

结果:

JavaScript中switch判断容易犯错的一个细节

在if语句里可以匹配,但为何在switch语句里不能匹配呢?

这是因为在switch语句里的case使用全等模式,也就相当于if里的使用三个等号类似。我们把case的代码改写一下

代码:

var n = '5';
switch(n){
    case '5': // 把原来的 case 5 改写成 case '5'
        alert('执行case分支');
        break;
    default:
        alert('执行default分支');
}

结果:

JavaScript中switch判断容易犯错的一个细节

改写了以后就能走case分支了,就像我们if里使用三个全等号一样

代码:

var n = '5';
if(n===5){
    alert('真 分支');
}else{
    alert('假 分支');
}

结果:

JavaScript中switch判断容易犯错的一个细节

因为使用全等,所以字符串5不等于数字5,结果走了假分支。

由以上例子说明在 switch中使用的是全等匹配模式,特别是数字与字符串匹配的时候需要注意的一个问题

Javascript 相关文章推荐
JS下高效拼装字符串的几种方法比较与测试代码
Apr 15 Javascript
raphael.js绘制中国地图 地图绘制方法
Feb 12 Javascript
动态加载jQuery的两种方法实例分析
Jul 17 Javascript
浅谈jQuery中ajaxPrefilter的应用
Aug 01 Javascript
防止Node.js中错误导致进程阻塞的办法
Aug 11 Javascript
详解js的延迟对象、跨域、模板引擎、弹出层、AJAX【附实例下载】
Dec 19 Javascript
微信小程序开发(一) 微信登录流程详解
Jan 11 Javascript
js手机号4位显示空格,银行卡每4位显示空格效果
Mar 23 Javascript
微信{"errcode":48001,"errmsg":"api unauthorized, hints: [ req_id: 1QoCla0699ns81 ]"}
Oct 12 Javascript
Vue-CLI与Vuex使用方法实例分析
Jan 06 Javascript
vue+render+jsx实现可编辑动态多级表头table的实例代码
Apr 01 Javascript
JavaScript中时间格式化新思路toLocaleString()
Nov 07 Javascript
JavaScript中使用arguments获得函数传参个数实例
Aug 27 #Javascript
JavaScript中输出标签的方法
Aug 27 #Javascript
JavaScript实现的GBK、UTF8字符串实际长度计算函数
Aug 27 #Javascript
JavaScript实现的使用键盘控制人物走动实例
Aug 27 #Javascript
JavaScript截取字符串的2个函数介绍
Aug 27 #Javascript
JavaScript中判断页面关闭、页面刷新的实现代码
Aug 27 #Javascript
jQuery中的read和JavaScript中的onload函数的区别
Aug 27 #Javascript
You might like
VFP与其他应用程序的集成
2006/10/09 PHP
基于php权限分配的实现代码
2013/04/28 PHP
Yii学习总结之数据访问对象 (DAO)
2015/02/22 PHP
PHP创建单例后台进程的方法示例
2017/05/23 PHP
thinkphp框架page类与bootstrap分页(美化)
2017/06/25 PHP
PHP里的$_GET数组介绍
2019/03/22 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
2020/02/21 PHP
iframe 上下滚动条如何默认在下方实现原理
2012/12/10 Javascript
JQuery入门—JQuery程序的代码风格详细介绍
2013/01/03 Javascript
javascript操作excel生成报表全攻略
2014/05/04 Javascript
js的touch事件的实际引用
2014/10/13 Javascript
node.js中的http.response.removeHeader方法使用说明
2014/12/14 Javascript
JQuery入门基础小实例(1)
2015/09/17 Javascript
利用jQuery和CSS将背景图片拉伸
2015/10/16 Javascript
Window.Open打开窗体和if嵌套代码
2016/04/15 Javascript
新手学习前端之js模仿淘宝主页网站
2016/10/31 Javascript
Angular angular-file-upload文件上传的示例代码
2018/08/23 Javascript
详解React native fetch遇到的坑
2018/08/30 Javascript
又拍云 Node.js 实现文件上传、删除功能
2018/10/28 Javascript
Vue实现微信支付功能遇到的坑
2019/06/05 Javascript
JavaScript实现电灯开关小案例
2020/03/30 Javascript
python解析html开发库pyquery使用方法
2014/02/07 Python
python中随机函数random用法实例
2015/04/30 Python
Django websocket原理及功能实现代码
2020/11/14 Python
美国购买和销售礼品卡平台:Raise
2017/01/13 全球购物
英国景点门票网站:attractiontix
2019/08/27 全球购物
Lookfantastic澳大利亚官网:英国知名美妆购物网站
2021/01/07 全球购物
控制工程专业个人求职信
2013/09/25 职场文书
国贸专业个人求职信分享
2013/12/04 职场文书
爱国卫生月实施方案
2014/02/21 职场文书
物流专业自荐信
2014/05/23 职场文书
好人好事演讲稿
2014/09/01 职场文书
针对吵架老公保证书
2015/05/08 职场文书
2015年学校管理工作总结
2015/07/20 职场文书
《分一些蚊子进来》读后感3篇
2020/01/09 职场文书
深入理解 Golang 的字符串
2022/05/04 Golang