奇怪的错误,隐形的字符 - 隐藏的引号和空格

时间:2016-04-18 16:30:43

标签: javascript arrays xmlhttprequest

我正在通过XMLHttpRequest阅读文本文件并通过responseText.split('\n')抓取每一行。之后,我将数据存储在一个数组中,每个字符由tab分隔,只有shift().split('\t')只有初始分割中的第一个元素。然后我根据这些条目,动态对象属性分配给一个对象。 代码如下所示:

var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function(){
        if(xhr.readyState == 4 && xhr.status == 200){
            var response = xhr.responseText;
                intermediary = response.trim().split('\n'), //split by new line
                headers = intermediary.shift().split('\t'), //remove table headers, but keep reference
                headersLength = headers.length;

            //WEIRD STUFF TEST
            o = new Object;
            for(var i=0; i < headers.length; i++){
                var a = headers[i];
                o[a] = '';
            }
            console.log(headers);
            console.log(o);
            //END OF WEIRD STUFF TEST

//rest of code

现在进入奇怪的部分。当我记录标题数组时,我会说:["Bob", "Max"]但是当我创建对象属性时,我得到{bob: "", "Max": ""} - 注意Max 周围的引号。 甚至更奇怪的是 - 它让我得到了解决 - 是Firefox没有引用引号而IE(Edge)在最后一个引用"Max "之前添加了额外的空格。 修复是做shift().trim().split('\t') - 基本上,确保班次不带任何东西。

我在多个编辑器上启用了所有隐藏的字符,标签,空格,文件中没有任何阴影。我在Windows 10上(不知道它是否重要,但也许它确实如此)。

我想知道为什么会发生这种情况?我们非常感谢您提供详细的解释(可以尽可能的技术说明)。我在想的是导致浏览器之间的行为差​​异是因为你不能让一个属性名称以空格结尾,但为什么一个白色空间首先潜入那里 - 看到没有看到它文件?

如果我是个白痴,答案就在我面前,那也是有效的。

注意:在.replace(' ','')上执行.trim()headers[i]不起作用。 注2:看到日志(注释)很明显为什么删除空格不起作用。问题仍然存在 - 回车如何进入并且不可见?

0 个答案:

没有答案