charAt()给我不好的输出

时间:2018-10-23 10:50:28

标签: javascript html for-loop

我正在编写一种编程语言,而在JavaScript中使用分号,而在我的语言中则使用斜杠。

代码如下:

        document.getElementsByTagName("input")[0].addEventListener("change", function() {
            var file = document.getElementsByTagName("input")[0].files[0];
            var reader = new FileReader();
            reader.onload = function(evt) {
                var lines = [];
                var data = evt.target.result;
                var i;
                var j;
                for (i = 1; i <= data.length; i++) {
                    var search = data.charAt(i);
                    if("/" === search){
                        lines.push(i);
                    }
                }
                document.body.innerText = lines.toString();
            };
            reader.readAsText(file, "UTF-8");
        }, false);
<body>
    <input type="file">
    <div>

    </div>
</body>

它应该输出斜线的位置,但是每次运行文件时,它会告诉我字符在斜线之后的位置。

我知道我可以使用一些数学方法来摆脱它,但是为什么会这样呢?

感谢,EthanZoneCoding

1 个答案:

答案 0 :(得分:1)

第一件事:charAt()是从零开始的,因此您应该从0开始迭代,并在到达data.length之前结束:

for (i = 0; i < data.length; i++) {
    /* ... */
}

如果要存储从一开始的索引而不是从零开始的索引,只需添加1就可以了:

lines.push(i + 1);