Javascript 奇数bug,不可见字符-隐藏引号和空格
我正在通过Javascript 奇数bug,不可见字符-隐藏引号和空格,javascript,arrays,xmlhttprequest,Javascript,Arrays,Xmlhttprequest,我正在通过XMLHttpRequest读取一个文本文件,并通过responseText.split('\n')获取每一行。之后,我将通过tab通过shift().split('\t')将每个字符集存储在一个数组中,这些字符由最初拆分的第一个元素分隔。然后,我根据这些条目将动态对象属性分配给。。物体。 代码如下所示: var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function(){ if(xhr.rea
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
var xhr=new-XMLHttpRequest();
xhr.onreadystatechange=函数(){
如果(xhr.readyState==4&&xhr.status==200){
var response=xhr.responseText;
intermediate=response.trim().split('\n'),//按新行拆分
headers=intermediate.shift().split('\t'),//删除表头,但保留引用
headersLength=headers.length;
//奇怪的东西测试
o=新对象;
对于(变量i=0;i
现在进入奇怪的部分。当我记录Header数组时,我会说:[“Bob”,“Max”]
但是当我创建对象属性时,我会得到{Bob:,“Max:”}
-注意Max周围的引号。
更奇怪的是,Firefox没有加引号,IE(Edge)在最后一个引号前加了一个额外的空格“Max”
。
解决方法是执行一个shift().trim().split('\t')
-基本上,确保这个班次没有携带任何东西
我已经在多个编辑器上启用了所有隐藏字符、制表符和空格,并且文件中没有任何隐藏的内容。我使用的是Windows 10(不知道这是否重要,但可能会)
我想知道的是为什么会发生这种情况?一个详细的解释(可以是技术性的)非常感谢。我认为导致浏览器之间行为差异的原因是,属性名称不能以空格结尾,但为什么首先会在其中隐藏一个空格?因为文件中没有任何内容可以看到它
如果我是个白痴,答案就在我面前,那也行
注意:在标题[i]
上执行.replace('',)
或修剪()
,不起作用。
注2:查看日志(注释)很明显为什么删除空格不起作用。但问题仍然存在-回车是如何进入的并且不可见?您可以使用
.charCodeAt()
函数编写一个函数来转储字符串中的字符代码。请向我们展示控制台.log(JSON.stringify)的内容(标题),JSON.stringify(o))
gives@Bergi[“BrandID”,“Name\r”]{“BrandID:”“Name\r:”“}-输出log@Pointy好主意。您正在拆分\n
-源文件中的行终止符可能是两个字符的序列\r\n
。因此,文件中的第一个字符串是可以的,因为它前面没有行终止符,但是行末尾的字符串会在末尾加上\r
。