请教这段js代码中最后为什么还要写一个return true?

yorickshan
  • 113
String.prototype.endWith = function(str){  
     if(str==null || str=="" || this.length == 0 ||str.length > this.length){      
       return false;  
     }  
     if(this.substring(this.length - str.length)){  
         return true;  
     }else{  
         return false;  
     }  
     return true; //这句代码的作用和意义是什么? 私以为以上两个条件语句已经包含所有情况-_-||
};  

如题

回复
阅读 2.3k
9 个回答
idleb
  • 277
✓ 已被采纳

最后一行加个return true就是让看代码的人一看出这个方法带返回值,在代码设计最初应该是

String.prototype.endWith = function(str){  
     return true;
}; 

然后再在内部做具体的逻辑判断

既然@代码宇宙 非常严肃的批评了我的回答,怕我会误导人民群众,建议我修改答案。好吧,我就强调一下,我没有说这样写是正确的,这只是代码设计之初的历史遗留,在开发测试时,告诉后面的人这里需要返回布尔值,而添加的逻辑代码似的return true变成了无效代码,但是没有被删除而已,但在JS里并不影响运行。没人会在 else return 后面故意再写个return吧,如果有人被误导了,建议重学 if-else。

没意义,根本进不来

你应该自信点,确实没意义

就是没什么用

是有那么点点多余的感觉!!可能是作者的习惯...

可能是作者的习惯,不写不舒服斯基

String.prototype.endWith = function(str){  
     if(str==null || str=="" || this.length == 0 ||str.length > this.length){      
       return false;  
     }  
     if(!this.substring(this.length - str.length)){  
       return false;  
     }
      
     return true; 
};  

这样就看起来舒服多了

不要怕,webstorm会告诉你unreachable code

webstorm还会帮你把代码优化成这样

String.prototype.endWith = function (str) {
  if (str == null || str === "" || this.length === 0 || str.length > this.length) {
    return false;
  }
  return !!this.substring(this.length - str.length);
}; 
小午休
  • 1
新手上路,请多包涵

确实走不到,可能看着更好看吧

宣传栏