面试其实无非就那点东西,翻来覆去的,有的考你原理,有的考你基础知识熟不熟。而这道题就是考基础知识的。关于string的截取,招式有很多,也不好说哪种更优秀,但你却要知道几种。
其实日常工作中知道那么一两种就可以了,但面试嘛,回答的越多越有效,得分就越高呗。
1、substring
这个内置函数的解释是
substring() 方法用于提取字符串中介于两个指定下标之间的字符。
substring() 方法返回的子串包括 开始 处的字符,但不包括 结束 处的字符。
意思就是'string'.substring(from, to) 中,from是必须的,to是不必须的
<script>
var astr = 'abcdefg';
var bbb = astr.substring(1, 3); // bc
var ccc = astr.substring(0); // abcdefg
var eee = astr.substring(-3); // abcdefg
var fff = astr.substring(20); // ''
</script>
面试题永远不会老老实实的考最基础的用法,如果考你基础用法,你做出来就入职了,你可能也干不长,他们就不需要有挑战的人出现。所以,我这里列举了一些不常用的场景,例如传入一个负数,那么substring就默认是从0开始截取,比如传的是一个超出字符串length范围的数字,那么就返回'' 空引号
那么可能面试官还会问你,如果函数中传入了一个不是数字的参数会怎么样?
<script>
var ggg = astr.substring(null); // abcdefg
var hhh = astr.substring('我们'); // abcdefg
var iii = astr.substring(1+1); // cdefg
</script>
怎么样,如果下次让你面一个大厂的大佬,你也有的问了,如果substring传入一个字符串会怎么样?如果我的substring里传入计算表达式会怎么样?
2、subStr
这个内置函数的解释是:
substr() 方法可在字符串中抽取从 开始 下标开始的指定数目的字符。
‘string’.substr(from, length) ,这里from是必填的,length是非必填的,length未填写,表示从from下标开始,一直截取到末尾
<script>
var bstr = 'abcdefg';
var aaa = bstr.substr(0); // abcdefg
var bbb = bstr.substr(-1, -1) // ''
var ccc = bstr.substr('我们', 3); // abc
var ddd = bstr.substr(0, 100); // abcdefg
</script>
所以是不是可以再次不断尝试, 我的length传入负数会怎么样,如果我不按规矩办,from值我传个字符串会怎么样,如果我的length传一个超出字符串长度的又会怎么样,只有不断的举一反三,才能算是对一个知识点的熟练掌握。至于精通嘛,瞎扯,哪有的精通的人儿呢
3、slice
其实这道题完全可以换个问法,比如你可以说一下字符串的substring substr slice的区别吗?而slice也是截取,但定义是这样的
slice(start, end) 方法可提取字符串的某个部分
还是按照之前的逻辑,如果单纯的'string'.slice(1, 3) 这恐怕完全没有出面试题的意义,新浪的工程师们就喜欢出这类问题,对于字符串,数组的这些方法,反反复复的问你参数这么传,这么传会怎么怎么样。
<script>
var str = "abcdefg";
var aaa = str.slice(-1, 3);
console.log(aaa); // 空
var bbb = str.slice(-1);
console.log(bbb); // g
var ccc = str.slice(2, -2);
console.log(ccc); // cde
var ddd = str.slice(6, -5);
console.log(ddd); // 空
var eee = str.slice();
console.log(eee); // abcdefg
</script>
是不是已经发现了slice的一个特点,说好的from必传,不传也能返回全部;他的from必须在左,to必须在右,否则截取不出来,to参数如果传入负值,就是从后面开始截取
4、特别方法
怎么叫特别方法呢,这些都是截取排在一起的,但是真实需求千差万别,很可能是一个字符串这里截取一点,那里截取一点,这就涉及到多种方法的组合。再比如我们用字符串的chrAt方法,也可以截取出单个字符,然后进行拼接,也是一种思路、
面试最重要的是什么?其实回答问题本身都不是最重要的,最重要的是,做个选择题吧要不