substring VS slice

之前写了一篇字符串操作的博客。其中有两个函数让人迷糊。就是substring和slice。所以今天特地的去了解一下。首先,这两个函数的功能,应该都很明白。就是切分字符串。两个函数只有细微的不同。我就很奇怪,为什么要创造两个这么相似的函数。所以今天就扒一扒里面的秘密。


JS的历史背景

首先来说说JS的创始人--布兰登·艾奇(Brendan Eich)。这就是我们的祖师爷。

Brendan Eich

长话短说,在当时java刚推出。然后我们的祖师爷个人不怎么喜欢java,但是当时公司让他开发一款语言,可以让浏览器和网页互动。这时祖师爷临危受命。公司要求和java相似。这一点让祖师爷很不开心,用10天就把JS设计出啦。由于祖师爷在编写代码的时候一点都不开心和时间太短。所以在细节上就有些问题。也导致了有些历史遗留的问题。所以,Javascript语言实际上是两种语言风格的混合产物----(简化的)函数式编程+(简化的)面向对象编程。让人难受的是,祖师爷自己本人都不喜欢自己的作品。多年后他还是不喜欢java。所以JS就像一夜情的产物。可是这个无心之作,现在风靡全球。


由于没有百度到实际内容。所以,就翻墙出去看看。其实有很多人已经发现这个这个问题了。有的解释是说了,为了方便不同的程序员快速上手。所以就用不同的名字。有的解释说,这是当时,设计者没有考虑的细节。目前貌似更多人相信这是设计者当时的失误。


好了。历史说完了。现在回归正题。他们的共同点和不同点。我们再总结一次。

substring(start,end) VS slice(start,end)

相同点:
  • 如果start等于end,就会返回一个空的字符串。
  • 如果end被忽略,就会返回一个start到整个字符串的末尾。
  • 如果end大于整个字符串的长度,就会返回一个start到整个字符串的末尾。
不同点:
  • substring
  • start>end:就会以小的数字作为起点。以大的数字作为结束点。
  • 如果start或end是NAN或者为负数。那么就会被认为是0。

  • slice
  • star>end:不会交换两个参数。返回undefined
  • star,end如果为负数,就从尾部开始计算。

区别已经和明显了。可想当年祖师爷写代码写的有多不开心啊。唉

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容