这个 转换
语句计算 表达 ,将表达式的值与一系列 案例
子句,并执行 报表 在第一次之后 案例
子句,直到 打破
遇到语句。 这个 违约
a的子句 转换
如果没有,语句将跳转到 案例
匹配表达式的值。
转换 ( 表达 ) {
案例 case表达式1 : 声明 案例 case表达式2 : 声明
案例 case表达式N : 声明 违约 : 声明 }
表达
结果与每个匹配的表达式 案例
条款。
case case表达式N
可选
A类 案例
用于匹配的子句 表达
。如果 表达
匹配任何 case表达式N
,执行从后面的第一条语句开始 案例
子句,直到 转换
语句或遇到的第一个语句 打破
.
违约
可选
A类 违约
条款; 如果提供,如果 表达
与任何 案例
条款。 A类 转换
语句只能有一个 违约
条款。
A类 转换
语句首先计算其表达式。 然后查找第一个 案例
子句,其表达式的计算结果与输入表达式的结果相同(使用 严格平等 并将控制权转移到该子句,执行该子句后面的所有语句。
只有在必要时才计算子句表达式-如果已经找到匹配项,则随后 案例
子句表达式将不会被求值,即使它们将被访问 故障排除 .
转换 ( 未定义 ) {
案例 慰问 . 日志 ( 1 ) :
案例 慰问 . 日志 ( 2 ) :
}
如果没有匹配 案例
子句时,程序将查找可选的 违约
子句,如果找到,则将控制权转移给该子句,执行该子句后面的语句。 如果没有 违约
子句,则程序继续在 转换
根据惯例 违约
子句是最后一个子句,但不一定是这样 转换
语句只能有一个 违约
条款; 倍数 违约
子句将导致 语法错误
.
您可以使用 打破
中的语句 转换
语句体提前爆发,通常当两个语句之间的所有语句 案例
条款已执行。 执行将在以下第一条语句中继续 转换
.
如果 打破
则执行将继续到下一个 案例
条款,甚至对 违约
子句,无论该子句表达式的值是否匹配。 这种行为称为“失败”。
常数 foo公司 = 0 ;
转换 ( foo公司 ) {
案例 - 1 : 慰问 . 日志 ( “负1” ) ;
打破 ;
案例 0 : 慰问 . 日志 ( 0 ) ;
案例 1 : 慰问 . 日志 ( 1 ) ;
打破 ;
案例 2 : 慰问 . 日志 ( 2 ) ;
打破 ;
违约 : 慰问 . 日志 ( “默认” ) ;
}
在适当的上下文中,其他控制流语句也会破坏 转换
声明。 例如,如果 转换
语句包含在函数中,然后 返回
语句终止函数体的执行,因此 转换
声明。 如果 转换
语句包含在循环中,然后 持续
语句停止 转换
语句并跳转到循环的下一个迭代。
这个 案例
和 违约
子句类似 标签 :它们指示控制流可能跳转到的位置。但是,它们不会创建词汇 范围 他们自己(也不会自动爆发——如上所述)。 例如:
常数 行动 = “打招呼” ;
转换 ( 行动 ) {
案例 “打招呼” :
常数 消息 = “你好” ; 慰问 . 日志 ( 消息 ) ;
打破 ;
案例 “打个招呼” :
常数 消息 = “嗨” ; 慰问 . 日志 ( 消息 ) ;
打破 ;
违约 : 慰问 . 日志 ( “收到空操作。” ) ;
}
此示例将输出错误“Uncaught SyntaxError:Identifier'message'has already been declared”,因为第一个 const消息=“hello”;
与第二个冲突 const消息=“hi”;
声明,即使它们在各自的case子句中。 归根结底,这都是由于 常数
声明位于由 转换
车身。
为了解决这个问题,无论何时您需要使用 让
或 常数
中的声明 案例
子句,将其包装在块中。
常数 行动 = “打招呼” ;
转换 ( 行动 ) {
案例 “打招呼” : {
常数 消息 = “你好” ; 慰问 . 日志 ( 消息 ) ;
打破 ;
}
案例 “打个招呼” : {
常数 消息 = “嗨” ; 慰问 . 日志 ( 消息 ) ;
打破 ;
}
违约 : { 慰问 . 日志 ( “收到空操作。” ) ;
}
}
此代码现在将输出 你好
在控制台中,没有任何错误。
在以下示例中,如果 快递
计算结果为 香焦
,程序将值与大小写匹配 香蕉盒
并执行关联的语句。 何时 打破
遇到时,程序中断 转换
并执行以下语句 转换
.如果 打破
被省略 “樱桃”案例
也将被执行。
转换 ( 快递 ) {
案例 “橙子” : 慰问 . 日志 ( “橙子每磅0.59美元。” ) ;
打破 ;
案例 “苹果” : 慰问 . 日志 ( “苹果每磅0.32美元。” ) ;
打破 ;
案例 “香蕉” : 慰问 . 日志 ( “香蕉每磅0.48美元。” ) ;
打破 ;
案例 “樱桃” : 慰问 . 日志 ( “樱桃每磅3.00美元。” ) ;
打破 ;
案例 “芒果” :
案例 “木瓜” : 慰问 . 日志 ( “芒果和木瓜每磅2.79美元。” ) ;
打破 ;
违约 : 慰问 . 日志 ( ` 对不起,我们没货了 ${ 快递 } . ` ) ;
} 慰问 . 日志 ( “你还有其他想要的吗?” ) ;
如果未找到匹配项,将从 违约
子句,然后执行其后的所有语句。
常数 foo公司 = 5 ;
转换 ( foo公司 ) {
案例 2 : 慰问 . 日志 ( 2 ) ;
打破 ;
违约 : 慰问 . 日志 ( “默认” ) ;
案例 1 : 慰问 . 日志 ( "1" ) ;
}
当你把 违约
在所有其他人之前 案例
条款。
此方法利用了以下事实:如果没有 打破
低于a 案例
条款,执行将继续到下一个 案例
条款,无论是否 案例
符合标准。
以下是单个操作顺序的示例 案例
语句,其中四个不同的值执行完全相同。
常数 动物 = “长颈鹿” ;
转换 ( 动物 ) {
案例 “奶牛” :
案例 “长颈鹿” :
案例 “狗” :
案例 “猪” : 慰问 . 日志 ( “这种动物还没有灭绝。” ) ;
打破 ;
案例 “恐龙” :
违约 : 慰问 . 日志 ( “这种动物已经灭绝了。” ) ;
}
以下是多操作序列的示例 案例
子句中,根据提供的整数,您可以接收不同的输出。 这表明它将按照您放置 案例
子句,并且它不必是数字顺序的。 在JavaScript中,您甚至可以将字符串的定义混合到 案例
声明。
常数 foo公司 = 1 ;
让 输出 = “输出:” ;
转换 ( foo公司 ) {
案例 0 : 输出 += “所以” ;
案例 1 : 输出 += “什么” ; 输出 += “是” ;
案例 2 : 输出 += “您的” ;
案例 三 : 输出 += “姓名” ;
案例 4 : 输出 += "?" ; 慰问 . 日志 ( 输出 ) ;
打破 ;
案例 5 : 输出 += "!" ; 慰问 . 日志 ( 输出 ) ;
打破 ;
违约 : 慰问 . 日志 ( “请选择一个从0到5的数字!” ) ;
}
此示例的输出:
价值
日志文本
foo公司
是 NaN公司
或者不是 1
, 2
, 三
, 4
, 5
,或 0
请从0到5中选择一个数字!
0
输出:那么你叫什么名字?
1
输出:你叫什么名字?
2
输出:你的名字?
三
输出:名称?
4
输出:?
5
输出:!
你可能经常会发现自己在做一系列 如果…其他
比赛。
如果 ( “获取” 在里面 全球This ) {
} 其他的 如果 ( “XMLHttpRequest” 在里面 全球This ) {
} 其他的 {
}
此模式不执行序列 ===
比较,但您仍然可以将其转换为 转换
构造。
转换 ( 真的 ) {
案例 “获取” 在里面 全球This :
打破 ;
案例 “XMLHttpRequest” 在里面 全球This :
打破 ;
违约 :
打破 ;
}
这个 开关(真)
模式作为 如果…其他
如果您想利用这个fall-through行为,它特别有用。
转换 ( 真的 ) {
案例 是方形的 ( 形状 ) : 慰问 . 日志 ( “这个形状是正方形。” ) ;
案例 是矩形 ( 形状 ) : 慰问 . 日志 ( “这个形状是一个矩形。” ) ;
案例 是四边形的 ( 形状 ) : 慰问 . 日志 ( “这个形状是四边形。” ) ;
打破 ;
案例 isCircle公司 ( 形状 ) : 慰问 . 日志 ( “这个形状是一个圆。” ) ;
打破 ;
}
BCD表仅在浏览器中加载 with JavaScript enabled. Enable JavaScript to view data.