【问题标题】:string.slice() with arguments in loop trouble带参数的 string.slice() 循环麻烦
【发布时间】:2014-03-21 22:46:36
【问题描述】:

我对字符串方法很感兴趣,在循环中的字符串上使用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() 工作方式相同

【问题讨论】:

    标签: javascript slice


    【解决方案1】:

    有一些细微的差异,其中大部分都在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);
    }
    

    【讨论】:

    • 这是一个绝妙的答案!感谢您对“JavaScript 中的 String.slice 和 String.substring 有什么区别?”的解释和链接。文章:-)
    猜你喜欢
    • 1970-01-01
    • 2020-01-23
    • 1970-01-01
    • 2017-08-13
    • 2023-03-13
    • 2020-05-13
    • 2015-03-09
    • 2012-11-02
    • 2014-05-10
    相关资源
    最近更新 更多