我正在玩字符串方法,并在循环中对字符串使用slice
时遇到问题:
var sentence = document.querySelector('.newClass').textContent.split(' '),
blank = '_________________________';
for(var i = 0; i < sentence.length; i += 1) {
console.log(sentence[i] + blank.substring(blank.length, sentence[i].length) + i); //works
console.log(sentence[i] + blank.slice(blank.length, sentence[i].length) + i); //???
}
代码: http://jsfiddle.net/cachaito/Jxzd5/
我确信string.slice()
的作用与string.substring()
答案 0 :(得分:2)
存在一些细微差别,其中大部分都是here所描述的。但是,您看到的行为是因为blank.length
始终大于sentence[i].length
,而substring
在这种情况下交换参数。来自MDN:
如果
indexA
大于indexB
,那么substring
的效果就好像交换了两个参数一样;例如,str.substring(1, 0) == str.substring(0, 1)
。
但是slice
并没有这样做。如果第一个参数大于第二个参数,则结果将为空字符串(假设两者都为正)。
试试这个:
for(var i = 0; i < sentence.length; i += 1) {
console.log(sentence[i] + blank.substring(blank.length, sentence[i].length) + i); //works
console.log(sentence[i] + blank.slice(sentence[i].length, blank.length) + i); //works
}
甚至这个:
for(var i = 0; i < sentence.length; i += 1) {
console.log(sentence[i] + blank.substring(blank.length, sentence[i].length) + i);
console.log(sentence[i] + blank.slice(0, -sentence[i].length) + i);
}