之前写了一篇字符串操作的博客。其中有两个函数让人迷糊。就是substring和slice。所以今天特地的去了解一下。首先,这两个函数的功能,应该都很明白。就是切分字符串。两个函数只有细微的不同。我就很奇怪,为什么要创造两个这么相似的函数。所以今天就扒一扒里面的秘密。
JS的历史背景
Brendan Eich首先来说说JS的创始人--布兰登·艾奇(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如果为负数,就从尾部开始计算。
区别已经和明显了。可想当年祖师爷写代码写的有多不开心啊。唉
网友评论