相同的IF语句是SWITCH语句不起作用(Java Script)

时间:2017-03-13 20:05:06

标签: javascript function if-statement switch-statement

我写了一个简短的程序,将数字转换为罗马数字。它包含两个非常相似的switch语句,其中一个工作得非常好,而另一个(在代码片段中注释掉)则不然。控制台记录“错误”消息,表明该功能的参数“e”没有以某种方式到达开关 但是,当我使用“if”而不是switch时,它可以工作。发生什么事了!?

提前致谢。

// d - digit being converted
// e - digit's place in the number (sorry, don't know the right term in English)

function convertToRoman(num) {
	
	var convert = function(d, e){
		
		var a = '';
		var b = '';
		var c = '';
		
		/* 
		switch (e){
			case '1': a='I'; b='V'; c='X';	break;
			case '2': a='X'; b='L'; c='C';	break;
			case '3': a='C'; b='D'; c='M';	break;
			case '4': a='M';                break;
			default:  console.log('error')}
		*/
		
		if	(e===1) {a='I'; b='V'; c='X';}
		else if (e===2) {a='X'; b='L'; c='C';}
		else if (e===3) {a='C'; b='D'; c='M';}
		else if (e===4) {a='M';}
		else		{console.log('error')}
			
		var s='';
		switch (d){
			case '0': s = '';		  break;
			case '1': s = a;		  break;
			case '2': s = a+a;		break;
			case '3': s = a+a+a;      break;
			case '4': s = a+b;		break;
			case '5': s = b;		  break;
			case '6': s = b+a;		break;
			case '7': s = b+a+a;      break;
			case '8': s = b+a+a+a;      break;
			case '9': s = a+c;		break;
			default:  s = '#';		break;	}
		return s;
	};

	arr = String(num).split("");

	for (i=arr.length-1; i>=0; i--){
		var e = arr.length-i;
		arr[i] = convert(arr[i], e);
	}
  
  return arr.join('');
}
convertToRoman(501);

1 个答案:

答案 0 :(得分:1)

当您拨打convert时,您传递了char代表d和num代表e,因此注释掉的switch语句需要使用数字,而不是字符,这是基本上你用if,else if,else替换。