逻辑判断是所有语言的必经之路,别的不说,WEB的兼容处理的逻辑是真的多,如何优化这些逻辑也是一门学问,接下来走一遍我理想中的优化 初学-->入门-->中级(o(╥﹏╥)o高级真的不会)
我想入门的小伙伴肯定写过判断今天是星期几的逻辑判断,就以此为例,我们慢慢升级
function returnWeekDay(){
var string='今天是星期'
var day=new Date().getDay()
if(date===0){
string+='日'
}
if(date===1){
string+='一'
}
if(date===2){
string+='二'
}
if(date===3){
string+='三'
}
if(date===4){
string+='四'
}
if(date===5){
string+='五'
}
if(date===6){
string+='六'
}
return string
}
switch也是一样的,就不写了,这是绝大多数新手的判断逻辑。然而有一天相关组织发现,星象有变,每周变成8天(产品的邪恶你是无法想象的),或者逻辑需求增多,需要逻辑判断做出更多的判断,这显然是不好的
function returnWeekDay(){
var string='今天是星期'
var day=new Date().getDay()
var dateArr=['天','一','二','三','四','五','六']
return string+dateArr[day]
}
考虑到结果只有7个,并且date对象返回的num也只有7个,很容易的利用数组进行判断
当然这是在有序的情况,无序如何操作呢,也很简单
function returnWeekDay(){
var string='今天是星期'
var day=new Date().getDay()
dateObj={
0:'天',
1:'一',
2:'二',
3:'三',
4:'四',
5:'五',
6:'六',
}
return string+dateObj[day]
}
function returnWeekDay(){
var string='今天是星期'
var day=new Date().getDay()
var dateObj={}
for(var i=0;i<7;i++){
dateObj[i]=i
}
return dateObj
}

其实这样也可以啊,只需要对value做一些判断即可,比如写一个方法100以内的数学num转换语文num
function numChar(num){
var lang = ['','一','二','三','四','五','六','七','八','九','十'];
var text = '';
var a = parseInt( num / 10 );
var b = num % 10;
if(a > 1){
text = lang[a]+lang[10]+lang[b];
}else if(a == 1){
text = lang[10]+lang[b];
}else{
text = lang[b];
}
return text;
}
然后再结合一下上面的 对0判断为7,那么对于逻辑来说总是更严谨的
function returnWeekDay(){
var string='今天是星期'
return string+'日一二三四五六'.charAt(new Date().getDay())
}
这时候你的产品来挑事了,加个工休判断
function returnWeekDay(){
var string='今天是星期'
var day=new Date().getDay()
dateObj={
0:['天','休'],
1:['一','工'],
2:['二','工'],
3:['三','工'],
4:['四','工'],
5:['五','工'],
6:['六','休'],
}
dataType={
'休':function(){
console.log('今天休息哦!')
},
'工':function(){
console.log('今天也要努力工作哦!')
}
}
var returnData={
'string':string+dateObj[day][0],
'method':dataType[dateObj[day][1]]
}
return returnData
}
三元运算符 适合简单的if(){}else{}
function num(a){
if(typeof a=='number'){
}else{
}
}
function num(a){
a=typeof a=='number'?a:b
}
b就相当于else
if(flag){
someMtehod()
}
//可以这样写
flag&&someMtehod()
if(d==a||d==b||d==c){
someMethod()
}
if([a,b,c].includes(d)){
someMethod()
}
网友评论