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 相关文章推荐
JavaScript DOM学习第八章 表单错误提示
Feb 19 Javascript
EasyUI的treegrid组件动态加载数据问题的解决办法
Dec 11 Javascript
服务器端的JavaScript脚本 Node.js 使用入门
Mar 07 Javascript
ExtJS4如何自动生成控制grid的列显示、隐藏的checkbox
May 02 Javascript
js实现鼠标划过给div加透明度的方法
May 25 Javascript
轻松实现JavaScript图片切换
Jan 12 Javascript
jQuery Ajax使用FormData对象上传文件的方法
Sep 07 Javascript
详解JS中的柯里化(currying)
Aug 17 Javascript
javaScript中的空值和假值
Dec 18 Javascript
JavaScript常用工具函数大全
May 06 Javascript
vue 解决data中定义图片相对路径页面不显示的问题
Aug 13 Javascript
Vue管理系统前端之组件拆分封装详解
Aug 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
从零开始学YII2框架(六)高级应用程序模板
2014/08/20 PHP
php实现Linux服务器木马排查及加固功能
2014/12/29 PHP
实例讲解yii2.0在php命令行中运行的步骤
2015/12/01 PHP
PHP实现的多文件上传类及用法示例
2016/05/06 PHP
[原创]php正则删除img标签的方法示例
2017/05/27 PHP
DOM精简教程
2006/10/03 Javascript
jQuery+.net实现浏览更多内容(改编php版本)
2013/03/28 Javascript
图文详解Heap Sort堆排序算法及JavaScript的代码实现
2016/05/04 Javascript
深入理解JavaScript中的浮点数
2016/05/18 Javascript
jQuery 移动端拖拽(模块化开发,触摸事件,webpack)
2016/10/28 Javascript
基于bootstrap实现bootstrap中文网巨幕效果
2017/05/02 Javascript
JavaScript输入分钟、秒倒计时技巧总结(附代码)
2017/08/17 Javascript
微信小程序下拉刷新界面的实现
2017/09/28 Javascript
React中上传图片到七牛的示例代码
2017/10/10 Javascript
JavaScript Array对象基本方法详解
2019/09/03 Javascript
Python实现利用最大公约数求三个正整数的最小公倍数示例
2017/09/30 Python
git进行版本控制心得详谈
2017/12/10 Python
Python3+Appium安装使用教程
2019/07/05 Python
Python流程控制 while循环实现解析
2019/09/02 Python
500行python代码实现飞机大战
2020/04/24 Python
pandas to_excel 添加颜色操作
2020/07/14 Python
Python实现网络聊天室的示例代码(支持多人聊天与私聊)
2021/01/27 Python
Python 爬取淘宝商品信息栏目的实现
2021/02/06 Python
Python绘制K线图之可视化神器pyecharts的使用
2021/03/02 Python
HTML5自定义data-* data(obj)属性和jquery的data()方法的使用
2012/12/13 HTML / CSS
优衣库英国官网:UNIQLO英国
2016/12/25 全球购物
美国儿童运动鞋和服装零售商:Kids Foot Locker
2017/08/05 全球购物
eDreams葡萄牙:全球最大的在线旅行社之一
2019/04/15 全球购物
幼儿园园长自我鉴定
2013/10/22 职场文书
大学生新学期计划书
2014/04/28 职场文书
2014-2015学年工作总结
2014/11/27 职场文书
薪资证明范本
2015/06/19 职场文书
Python中Cookies导出某站用户数据的方法
2021/05/17 Python
python树莓派通过队列实现进程交互的程序分析
2021/07/04 Python
Oracle 死锁的检测查询及处理
2021/09/25 Oracle
详解Nginx的超时keeplive_timeout配置步骤
2022/05/25 Servers