我们在开发项目中经常遇到对数据的判断进行相应的逻辑(if..else  ,三元运算等),Switch 语句用来选择多个需要执行的代码块 ,一定程度上简化了if....else

1. 语法

switch(表达式) {
case n:
代码块
break;
case n:
代码块
break;
default:
默认代码块
}

2. 代码解释
计算一次 switch 表达式
把表达式的值与每个 case 的值进行对比
如果存在匹配,则执行关联代码
3. break 关键词
如果 JavaScript 遇到 break 关键词,它会跳出 switch 代码块。不必中断 switch 代码块中的最后一个 case。代码块在此处会自然结束。

4. default 关键词
default 关键词规定不存在 case 匹配时所运行的代码。

default 不必是 switch 代码块中最后一个 case。
如果 default 不是 switch 代码块中最后一个 case,请记得用 break 结束默认 case。
default 是可选的,并非必不可少(虽然惯例如此)。break 相关规则对 default 仍
然适用。
5. 严格的比较
Switch case 使用严格比较(===)。值必须与要匹配的类型相同。只有操作数属于同一类型时,严格比较才能为 true。

function demo(param) {
switch (param) {
case '1':
console.log('1')
break
case '2':
console.log('2')
break
default:
console.log('default')
}
} demo('2') // 2
demo(2) // default
demo(new String('2')) // default
let o1 = {}
let o2 = {}
let o3 = {}
let o4 = o3 function demo (o) {
switch (o) {
case o1:
console.log('o1')
break
case o2:
console.log('o2')
break
case o3:
console.log('o3')
break
default:
console.log('default')
}
} demo(o1) // o1
demo(o3) // o3
demo(o4) // o3

6. case后接表达式

function demo (param) {
switch (true) {
case param == '1':
console.log('1')
break
case param == '2':
console.log('2')
break
default:
console.log('default')
}
} demo (1) // 1
demo ('1') // 1
demo (2) // 2
function demo () {
switch (3) {
case 1 + 1:
console.log('1 + 1')
break
case 1 + 2:
console.log('1 + 2')
break
case 1 + 3:
console.log('1 + 3')
break
default:
console.log('default')
}
} demo() // 1 + 2
function demo (a, b) {
switch (a) {
case b + 1:
console.log('b + 1')
break
case b + 2:
console.log('b + 2')
break
case b + 3:
console.log('b + 3')
break
default:
console.log('default')
}
} demo(3, 1) // b + 2
demo(4, 1) // b + 3
demo(4, 2) // b + 2
demo(4, 4) // default

7. 表达式中的严格相等(重点五颗星)

function demo () {
let a = 'hello'
let b = '10' switch (true) {
case (a || b == 10):
console.log('1')
break
default:
console.log('default')
}
} // a || b == 10 的值为 hello,和 true 不严格相等
demo() // default
function demo () {
let a = 'hello'
let b = '10' switch (true) {
case !!(a || b == 10):
console.log('1')
break
default:
console.log('default')
}
} demo() // 1

switch写法详解的更多相关文章

  1. Flex布局新旧混合写法详解(兼容微信)

    原文链接:https://www.usblog.cc/blog/post/justzhl/Flex布局新旧混合写法详解(兼容微信) flex是个非常好用的属性,如果说有什么可以完全代替 float 和 ...

  2. linux系统初始化——sysinit文件写法详解

    sysinit文件写法详解 sysinit文件是linux初始化文件系统时执行的第一个脚本文件.它主要做在各个运行级别中进行初始化工作,包括: 启动交换分区;检查磁盘;设置主机名;检查并挂载文件系统; ...

  3. Flex 布局新旧混合写法详解(兼容微信)

    flex 是个非常好用的属性,如果说有什么可以完全代替 float 和 position ,那么肯定是非它莫属了(虽然现在还有很多不支持 flex 的浏览器).然而国内很多浏览器对 flex 的支持都 ...

  4. “makefile”写法详解,一步一步写一个实用的makefile,详解 sed 's,$∗\.o[ :]*,\1.o $@ : ,g' < $@.

    目的:编写一个实用的makefile,能自动编译当前目录下所有.c/.cpp源文件,支持二者混合编译.并且当某个.c/.cpp..h或依赖的源文件被修改后,仅重编涉及到的源文件,未涉及的不编译. 二要 ...

  5. 我的c++学习(5)switch语句详解

    #include "stdafx.h" #include<iostream> using namespace std; #include<iomanip> ...

  6. SVN switch 用法详解

    一直知道SVN有个switch命令,但是对它的介绍教程却很少,大多是生硬的svn帮助文档里的文字,从而一直不怎么会用.今天看了这篇文章,突觉豁然开朗,整理下来以备查阅. 使用SVN,自然是需要与别人合 ...

  7. jquery 中 (function( window, undefined ) {})(window)写法详解(转)

    最常见的闭包 (Closure) 范式大家都很熟悉了: 123 (function() {// ...})(); 很简单,大家都在用.但是,我们需要了解更多.首先,闭包是一个匿名函数 (Anonymo ...

  8. JavaScript分支语句if, else if, switch 案例详解

      if语句主要是在需要判断,或者在可知有多少种情形时使用的语句.A==B?"A等于B";"A不等于B"; 基本结构:           if(判断条件){ ...

  9. JavaScript对象原型写法详解

        体现对象原型分步式写法 //原型分步式写法 //构造函数 function Person(){} //对象原型 Person.prototype.name = 'Avensatr'; Pers ...

  10. Flex布局新旧混合写法详解

    flex是个非常好用的属性,如果说有什么可以完全代替 float 和 position ,那么肯定是非它莫属了(虽然现在还有很多不支持 flex 的浏览器).然而国内很多浏览器对 Flex 的支持都不 ...

随机推荐

  1. RabbitMQ详解(上)

    一:MQ的相关概念 MQ(message queue),从字面意思上看,本质是个队列,FIFO 先入先出,只不过队列中存放的内容是message 而已,还是一种跨进程的通信机制,用于上下游传递消息.在 ...

  2. MySql中执行计划如何来的——Optimizer Trace

    作者:京东物流 籍磊 1.前言 当谈到MySQL的执行计划时,会有很多同学想:"我就觉得使用其他的执行方案比EXPLAIN语句输出的方案强,凭什么优化器做的决定与我得不一样?".这 ...

  3. vue中使用西瓜视频api

    https://v2.h5player.bytedance.com/en/api/ 1 npm install xgplayer 1 <div id="mse">< ...

  4. 2022年5月5日模拟赛题解与总结(ABC237)

    总结 初一第一,竞赛班第二 还可以,为了照顾提高班来的四个同学放了四个水题,可惜他们做的不是很理想,希望他们下次可以获得满意的成绩 这次做的其实是 AtCoder ABC237 A.Not Overf ...

  5. NC51101 Lost Cows

    题目链接 题目 题目描述 \(N (2 \leq N \leq 8,000)\) cows have unique brands in the range 1..N. In a spectacular ...

  6. 2022-09-30:以下go语言代码输出什么?A: true true false true false; B: true false false true false; C: true true

    2022-09-30:以下go语言代码输出什么?A: true true false true false: B: true false false true false: C: true true ...

  7. 2022-04-23:给定一个长度为4的整数数组 cards 。你有 4 张卡片,每张卡片上都包含一个范围在 [1,9] 的数字。您应该使用运算符 [‘+‘, ‘-‘, ‘*‘, ‘/‘] 和括号 ‘

    2022-04-23:给定一个长度为4的整数数组 cards .你有 4 张卡片,每张卡片上都包含一个范围在 [1,9] 的数字.您应该使用运算符 ['+', '-', '*', '/'] 和括号 ' ...

  8. 2021-07-05:股票问题2。给定一个数组 prices ,其中 prices[i] 是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖

    2021-07-05:股票问题2.给定一个数组 prices ,其中 prices[i] 是一支给定股票第 i 天的价格.设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖 ...

  9. 2021-10-20:分数到小数。给定两个整数,分别表示分数的分子numerator和分母denominator,以字符串形式返回小数。如果小数部分为循环小数,则将循环的部分括在括号内。输入: num

    2021-10-20:分数到小数.给定两个整数,分别表示分数的分子numerator和分母denominator,以字符串形式返回小数.如果小数部分为循环小数,则将循环的部分括在括号内.输入: num ...

  10. 「P4」试下1个半月能不能水出个毕设

    期间的一些感想 对于这个时间的把控,前一个月实际上我什么都没做,现在都堆在最后的半个月了 在做毕业设计的阶段,我总结了一个教训,就是:「慢就是快」,我想这句话可能对我以后的学习都会有比较大的影响.我是 ...