说说 javascript 字符截取的三个办法
- String.prototype.substr
- String.prototype.substring
- String.prototype.slice
这三个办法平时都在用,只是有时不晓得用哪个更好,明天就来看看他们的异同
这 3 个办法都承受 2 个可选参数。
第 1 种状况:都不传参
var string = "hello";
string.substr();
> hello
string.substring();
> hello
string.slice();
> hello
从下面代码能够看出,如果不传参 3 个办法没有什么区别,当然工作中不可能这样用,这里只是为什么测试它们的行为
第 2 种状况:都传一个参数 0
var string = "hello";
string.substr(0);
> hello
string.substring(0);
> hello
string.slice(0);
> hello
输入跟第一种状况一样,上面咱们试一下第三种状况,传个 2
第 3 种状况:都传一个参数 2
var string = "hello";
string.substr(2);
> llo
string.substring(2);
> llo
string.slice(2);
> llo
3 个办法输入依然雷同,当初咱们晓得了,第一次参数的作用是示意从第几个位开始(蕴含以后地位),下面三种状况输入逻辑都一样,为什么要有 3 个行为统一的办法?先不要焦急,下面说了,还能够传第二个参数,上面咱们试试
第 4 种状况:都传两个参数
var string = "hello";
string.substr(2, 1);
> l
string.substring(2, 1);
> e
string.slice(2, 1);
> ''
开始产生差别了,上例 substr 和 sbustring 都有输入,只有 slice 输入了字符串。
由此咱们晓得第二个参数的作用,substr 的第二个参数示意个数,其余两个还是示意地位,substring 把两个参数进行了调换,返回了“e”,slicet 起点小于终点,所有输入为空。
下面的例子参数都是自然数,上面咱们试试正数会怎么样
第 5 种状况:第一个参数为正数
var string = "hello";
string.substr(-1);
> o
string.substring(-1);
> hello
string.slice(2, -1);
> o
这次差异更大了,substr 和 slice 为什么返回最初一个字母?依据 <<javascript 高级程序设计 >> 阐明,这两个办法在第一个参数为正数时,会把字符串长度加上这个参数,即 5 + -1 = 4, 所以输入了字母 “o”, 而 substring 会第一个负参数当 0 解决,所以输入了“hello”,接下来咱们试试在第一个参数为正数,别离传入第二个参数为自然数和正数,看看返回值
var string = "hello";
string.substr(-1, 1); // 前面的参数示意个数
> o
string.substr(-1, -1); // 如果第二个参数为正数会转成 0 即 string.substr(4, 0);
> ""
string.substring(-1,1); // 相当于 string.substring(0, 1)
> h
string.substring(-1,-1); // 会把所有正数转成 0,即 string.substring(0,0)
> ""
string.slice(-1, -1); // 将所有正数参数加上字符串长度 即 string.slice(4,4)
> ""
最初留神一下它们的不同之处
- substr 第一个参数为个数, 其余两个办法为地位下标
- substring 在参数为正数时,通通转成 0, substr 只把第二个参数转成 0
- substring 在第一个大于第二个参数时,会隐式调换参数地位 substring(3,1) => substring(1,3)