【问题标题】:JavaScript switch statement fails to match caseJavaScript switch 语句无法匹配大小写
【发布时间】:2016-07-30 18:20:06
【问题描述】:

我有以下问题要解决。

问题 5. 数字作为单词

编写一个要求输入数字 (0-9) 的脚本,并根据输入将数字显示为单词(英文)。 在输入无效的情况下打印“not a digit”。 使用 switch 语句。 例子:

digit   result
2       two
1       one
0       zero
5       five
-0.1    not a digit
hi      not a digit
9       nine
10      not a digit

=

这是我的 JavaScript 和 HTML HTML:

<input type="text" id="textInput">
<button id="react">Check</button>
<p id="result"></p>

我的 JavaScript:

document.addEventListener("DOMContentLoaded",function(){

   var input = document.getElementById('textInput');
   var button = document.getElementById('react');
   var result = document.getElementById('result');


   button.addEventListener('click',function(){

       switch (input.value) {
           case 0:
               result.innerHTML = 'zero';
               break;
           case 1:
               result.innerHTML = 'one';
               break;
           case 2:
               result.innerHTML = 'two';
               break;
           case 3:
               result.innerHTML = 'three';
               break;
           case 4:
               result.innerHTML = 'four';
               break;
           case 5:
               result.innerHTML = 'five';
               break;
           case 6:
               result.innerHTML = 'Six';
               break;
           case 7:
               result.innerHTML = 'Seven';
               break;
           case 8:
               result.innerHTML = 'Eight';
               break;
           case 9:
               result.innerHTML = 'Nine';
               break;
           default:
               result.innerHTML = 'not a digit';
               break;
       }

   });

});

问题是当我输入一个 0-9 的数字时,它会显示默认语句。

【问题讨论】:

标签: javascript


【解决方案1】:

value 是字符串格式。将其转换为数字,因为switch 语句不强制类型(与if 语句不同)

switch(+input.value) {

或

switch(parseInt(input.value, 10)) {

我也会建议使用数组或对象。

var arr = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'];

result.innerHTML = arr[+input.value] || 'Not a Digit';

【讨论】:

  • input.value 是否总是一个字符串?
  • 所以如果我设置为 ,那么我的 switch 语句就可以工作而不必将其解析为数字?
  • @Nasco.Chachev No. 从 DOM 读取的任何内容都是字符串。您必须手动将其转换为数字。
  • 你可以使用input.valueAsNumber()
  • 这很有趣,我认为switch 会强制类型but I was wrong。来自 EcmaScript 标准:If input is equal to clauseSelector as defined by the === operator, then...ecma-international.org/ecma-262/5.1/#sec-12.11
猜你喜欢
  • 2013-10-11
  • 1970-01-01
  • 2021-10-21
  • 1970-01-01
  • 1970-01-01
  • 2011-02-23
  • 2021-04-26
  • 2013-04-21
  • 1970-01-01
相关资源
最近更新 更多