Javascript 而循环条件评估未按预期工作

Javascript 而循环条件评估未按预期工作,javascript,arrays,json,string,object,Javascript,Arrays,Json,String,Object,通常,我希望这个while循环条件的计算结果为true,并且里面的代码可以运行: while ([" ", ":", ",", ""].includes("")) { cursor = getCh(); } 如果您将下面的代码段复制到devtools中,您将看到在第18行,与我上面概述的相同的场景计算结果为false,并且其中的代码没有运行。我想知道原因。同样,如果您在第18行放置一个断点并进入nextValue函数,您将看到游标被设置为空字符串,然后while循环

通常,我希望这个while循环条件的计算结果为true,并且里面的代码可以运行:

while ([" ", ":", ",", ""].includes("")) {
        cursor = getCh();
      }
如果您将下面的代码段复制到devtools中,您将看到在第18行,与我上面概述的相同的场景计算结果为false,并且其中的代码没有运行。我想知道原因。同样,如果您在第18行放置一个断点并进入nextValue函数,您将看到游标被设置为空字符串,然后while循环的条件被检查。它没有计算为true并进入循环,而是计算为false,如我上面所述parseJSON函数的其余部分不是我试图回答的问题的一部分,我只是想知道为什么当游标变量等于空字符串时,nextValue helper函数中的while循环没有被输入。因为这是我唯一一次遇到这个问题,所以有必要粘贴所有代码

我已经使用开发工具在函数运行时检查了这些值,一切看起来都正常

var parseJSON=函数(json){
json=json.split(“”)
var cursor=json[0];
函数解析器(){
变量语法={
“对象”:{
“构建”:函数(){
var obj={};
while(光标!=“}”){
下一个值([“”,“:”,“,”,“,”);
如果(游标===未定义| |游标===“}”){
cursor=getCh();
返回obj;
}
var属性=解析器(json);
下一个值([“:”,“]);
obj[property]=解析器(json);
}
cursor=getCh();
返回obj;
},
'标识符':[“{”,“:”,“}”]
}
};
//重置json变量并返回第一个字符
函数getCh(){
json=json.slice(1);
返回json[0];
}
//重置游标,直到游标不等于参数
函数nextValue(char){
//在不是值的情况下运行getCh()
cursor=getCh();
while(字符包括(光标)){
cursor=getCh();
}
}
//搜索语法中的类型标识符以确定
//运行哪个函数
for(语法中的var键){
if(语法[key].identifier.includes(游标)){
返回语法[key].build();
}
}
};
返回解析器(json);
};
变量输入=“{\r\n”+
““词汇表”:{\n”+
““标题”:“示例词汇表”,\n\r”+
'\t\t“GlossDiv”:{\r\n'+
““标题”:“S”,\r\n”+
'\t\t\t“GlossList”:{\r\n'+
““GlossEntry”:{\r\n”+
““ID”:“SGML”,\r\n”+
'\t\t\t\t\t“排序”:“SGML”,\r\n'+
“\t\t\t\t\t”GlossTerm:“标准通用”+
“标记语言”,\r\n+
'\t\t\t\t\t“首字母缩略词”:“SGML”,\r\n'+
“\t\t\t\t\t”Abbrev:“ISO 8879:1986”,\r\n”+
'\t\t\t\t\t“GlossDef”:{\r\n'+
“para”:“一种元标记语言”+
'用于创建标记语言,如DocBook。“,\r\n'+
“\t\t\t\t\t\t”glosssee也“:[“GML”,“XML”]\r\n”+
“},\r\n”+
'\t\t\t\t\t“GlossSee”:“标记”\r\n+
“}\r\n”+
“}\r\n”+
“}\r\n”+
“}\r\n”+
“}\r\n”

log(parseJSON(输入))我不确定代码中的
getCh()
如何返回空字符串。它似乎只能返回字符串或
未定义的
@vsemozhetbyt getCh()返回索引0处json数组前面的内容,但这不是我遇到的问题。如果在第18行放置断点并单步执行nextValue函数,您将看到游标设置为空字符串,然后检查while循环的条件。它没有计算为true并进入循环,而是计算为false,如我上面所述。如果您在控制台中运行
cursor.charCodeAt(0)
设置
cursor
后,它看起来像一个空字符串,您将得到
13
(即
'\r'
)和
cursor.length
1
。如果
索引
越界,则无法从
str[index]
中获取空字符串,只能获取1个字符的子字符串或
未定义的子字符串。@vsemozhetbyt谢谢,这很有意义并解决了这个谜。我不确定代码中的
getCh()
如何返回空字符串。它似乎只能返回字符串或
未定义的
@vsemozhetbyt getCh()返回索引0处json数组前面的内容,但这不是我遇到的问题。如果在第18行放置断点并单步执行nextValue函数,您将看到游标设置为空字符串,然后检查while循环的条件。它没有计算为true并进入循环,而是计算为false,如我上面所述。如果您在控制台中运行
cursor.charCodeAt(0)
设置
cursor
后,它看起来像一个空字符串,您将得到
13
(即
'\r'
)和
cursor.length
1
。如果
索引超限,则无法从
str[index]
获取空字符串,只能获取1个字符的子字符串或
未定义的
。@vsemozhetbyt谢谢,这很有意义,解决了这个谜。