Javascript 中字符串的 Switch-Case 未按预期工作

Switch-Case for strings in Javascript not working as expected(Javascript 中字符串的 Switch-Case 未按预期工作)
本文介绍了Javascript 中字符串的 Switch-Case 未按预期工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我在字符串和 switch-case 方面遇到了这个问题,我会尽量保持简单.

So I have this problem with strings and switch-case, and I'll try to keep it as simple as possible.

这里 event.keyCode 的值为65",是a"的 keydown 事件的结果(使用 JQuery).

Here event.keyCode has the value "65", and is the result of a keydown event of 'a' (using JQuery).

if (event.keyCode == "65") {
   alert("hmmmm");
}

这行得通,但是:

switch (event.keyCode) {
   case '65':
      alert("Yay!");
      break;
}

那不是.但是,这将起作用:

That doesn't. However this will work:

switch ('65') {
   case '65':
      alert("Yay!");
      break;
}

如果我这样做:

var t = '65';
switch (t) {
   case '65':
      alert("Yay!");
      break;
}

它有效.然后我尝试了这个:

It works. And then I tried this:

var t = event.keyCode;
switch (t) {
   case '65':
      alert("Yay!");
      break;
}

但它失败了!

那么为什么它在开头的 if-block 中匹配,但在 switch-case 中却不匹配?

So why does it match in the if-block at the beginning, but not for the switch-case?

推荐答案

keyCode 是整数,而不是字符串.当您使用 == 时,转换是隐式完成的.但是,该开关使用 === 的等效项,它不允许隐式转换.您可以通过以下方式轻松测试:

keyCode is an integer, not a string. When you use ==, the conversion is done implicitly. However, the switch uses the equivalent of ===, which doesn't allow implicit conversions. You can test this easily with:

switch (65) {
   case '65':
      alert("Yay!");
      break;
}

正如预期的那样,它不会发出警报.

As expected, it does not alert.

这在 ECMAScript 中有说明,第 5 版第 12.11 节(switch 语句).如果input 等于 === 运算符定义的 clauseSelector",解释器将输入 case 语句.在我上面的示例中,input 是 65(整数),而 ClauseSelector 是 '65'(字符串),它们不是 ===.

This is stated in ECMAScript, 5th edition section 12.11 (switch statement). The interpreter will enter a case statement if "input is equal to clauseSelector as defined by the === operator". input is 65 (integer) and clauseSelector is '65' (string) in my above example, which are not ===.

这篇关于Javascript 中字符串的 Switch-Case 未按预期工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Update another component when Formik form changes(当Formik表单更改时更新另一个组件)
Formik validation isSubmitting / isValidating not getting set to true(Formik验证正在提交/isValiating未设置为True)
React Validation Max Range Using Formik(使用Formik的Reaction验证最大范围)
Validation using Yup to check string or number length(使用YUP检查字符串或数字长度的验证)
Updating initialValues prop on Formik Form does not update input value(更新Formik表单上的初始值属性不会更新输入值)
password validation with yup and formik(使用YUP和Formick进行密码验证)