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 相关文章推荐
HTML IMG标签 onload 内存溢出导致浏览器CPU占用过高
Mar 09 Javascript
学习YUI.Ext 第六天--关于树TreePanel(Part 1)
Mar 10 Javascript
JavaScript 对任意元素,自定义右键菜单的实现方法
May 08 Javascript
JavaScript执行顺序详细介绍
Dec 04 Javascript
js实现div闪烁原理及实现代码
Jun 24 Javascript
js实现的页面矩阵图形变换特效
Jan 26 Javascript
jQuery控制frames及frame页面JS的方法
Mar 08 Javascript
Wireshark基本介绍和学习TCP三次握手
Aug 15 Javascript
JavaScript中关于iframe滚动条的去除和保留
Nov 17 Javascript
JQuery查找子元素find()和遍历集合each的方法总结
Mar 07 Javascript
Vue自定义多选组件使用详解
Sep 08 Javascript
微信小程序实现锚点跳转
Nov 23 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
PHP数据集构建JSON格式及新数组的方法
2012/11/07 PHP
如何解决PHP使用mysql_query查询超大结果集超内存问题
2016/03/14 PHP
php获取本机真实IP地址实例代码
2016/03/31 PHP
php网页版聊天软件实现代码
2016/08/12 PHP
php json相关函数用法示例
2017/03/28 PHP
php文件上传及下载附带显示文件及目录功能
2017/04/27 PHP
安装docker和docker-compose实例详解
2019/07/30 PHP
CSS JavaScript 实现菜单功能 改进版
2008/12/09 Javascript
一组JS创建和操作表格的函数集合
2009/05/07 Javascript
js 绑定带参数的事件以及手动触发事件
2010/04/27 Javascript
推荐17个优美新鲜的jQuery的工具提示插件
2012/09/14 Javascript
JQuery以JSON方式提交数据到服务端示例代码
2014/05/05 Javascript
实现placeholder效果的方案汇总
2015/06/11 Javascript
Windows 系统下设置Nodejs NPM全局路径
2016/04/26 NodeJs
JavaScript实现定时页面跳转功能示例
2017/02/14 Javascript
Node.js如何实现注册邮箱激活功能 (常见)
2017/07/23 Javascript
javascript按顺序加载运行js方法
2017/12/01 Javascript
Angular2+如何去除url中的#号详解
2017/12/20 Javascript
layer弹出的iframe层在执行完毕后关闭当前弹出层的方法
2018/08/17 Javascript
浅谈webpack SplitChunksPlugin实用指南
2018/09/17 Javascript
javascript实现前端成语点击验证
2020/06/24 Javascript
Python实现截屏的函数
2015/07/26 Python
Python MD5加密实例详解
2017/08/02 Python
django用户登录和注销的实现方法
2018/07/16 Python
opencv3/C++图像像素操作详解
2019/12/10 Python
python内置模块collections知识点总结
2019/12/19 Python
PyTorch实现ResNet50、ResNet101和ResNet152示例
2020/01/14 Python
Carter’s官方旗舰店:美国受欢迎的婴童服装品牌
2018/01/21 全球购物
欧洲最大的品牌水上运动服装和设备在线零售商:Wuituit Outlet
2018/05/05 全球购物
联想德国官网:Lenovo Germany
2018/07/04 全球购物
在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern "C"
2014/08/09 面试题
励志演讲稿800字
2014/08/21 职场文书
活动总结新闻稿
2014/08/30 职场文书
2015年监理个人工作总结
2015/05/23 职场文书
导游词之黄帝陵景区
2019/09/16 职场文书
MySQL 中如何归档数据的实现方法
2022/03/16 SQL Server