string.slice()带有循环中的参数

时间:2014-03-21 22:46:37

标签: javascript slice

我正在玩字符串方法,并在循环中对字符串使用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()

相同

1 个答案:

答案 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);
}