Object字面量替代switch

其实使用switch本不是什么大问题,只是代码看起来比较累赘,每个case都不能用大括号( { } )括起来,都需要有个break来终止,这与我们JavaScript的编程习惯,用花括号表示代码块不太符合。
大家对比一下以下两段代码:

switch语句的问题

  • case语句比较相等使用的是===,而不是 ==
    所以下面的代码会出现问题
var type = '0';
var temp='';
switch(type) {
  case 0:
    temp='A';  // 不会被执行,因为0 !== '0'
    break;
  case 1:
    temp='B'; 
    break;
  default:
    break;
}
  • case语句不使用花括号({ })建立代码块
    如上代码
  • 每个case语句后手动加上break语句(有些情况可能多个case语句共用一个break)。
    这样子的话会显得代码比较繁琐
  • case中的判断是逐条进行的
    也就意味着当判断条件增多时,查找对应匹配的条件可能会更费时。
    所以在介绍switch…case语句时,很多资料会提醒读者:对各case条件的顺序要做到心中有数,将最可能匹配到的case语句放到最前面可以提高效率。

对比switch语句与Object语句

// code one
switch(type){
	case 0:
		temp='A';
		break;
	case 1:
		temp='B';
		break;
	case 2:
		temp='C';
		break;
	default:
		temp='X';
		break;
}
//code two
const opt={
	0: 'A',
	1: 'B',
	2: 'C',	
}
temp=opt[type];

简洁程度显而易见。

如何使用Object替代switch

考虑默认情况

上面的代码基本上已经展示了如何使用了,但是没有考虑switch的默认情况,修改代码如下:

const opt={
	0: 'A',
	1: 'B',
	2: 'C',	
	'default': 'X'
}
temp = opt[type] ? opt[type] : opt['default'];

多条件共用业务逻辑

例如:
switch

switch(type){
	case 0:
	case 1:
		temp = 'A';
		break;
	case 2:
	case 3:
		temp = 'B';
		break;
	default:
		temp= 'X';
		break;
}

object

function isA(){
	return 'A';
}
function isB(){
	return 'B';
}
function isDefault(){
	return 'X';
}
const opt={
	0: isA,
	1: isA,
	2: isB,
	3: isB,
	'default': isDefault
}
temp = opt[type] ? opt[type]() : opt['default']();

总结

switch…case作为条件判断的老牌主力,繁琐的句式、排错困难等缺点使得其在很多情况下已经不能达到我们的期望了,而反观Object的灵活性、易用性,我们有何理由不使用呢?更由于JavaScript作为弱类型语言,Object字面量中不仅仅能够像上文中返回字符串或者函数,在其中可以做任何操作。

我想说的话

学习的进步离不开广大网友的支持,欢迎大家进入web前端学习交流群(852590787):
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42420703/article/details/82894727