我正在通过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:看到日志(注释)很明显为什么删除空格不起作用。问题仍然存在 - 回车如何进入并且不可见?