我有以下代码:
var linesMissingDelim = [];
var linesMultipleDelims = [];
var rawLines = rawWordsTxt.split(new RegExp('\r\n?|\n'));
rawLines.forEach(function (rawLine, index){
var parsedLine = rawLine.split(delim);
if(parsedLine.length-1 === 1){
oWords.lang1list.push(parsedLine[0]);
oWords.lang2list.push(parsedLine[1]);
}
else if (parsedLine.length-1 === 0){
linesMissingDelim.push(index+1);
}
else {
linesMultipleDelims.push(index+1);
}
});
if (linesMissingDelim === [] && linesMultipleDelims === []){
doSomething(); //the file is valid, do stuff
}
else {
if (linesMissingDelim.length > 0){
doSomething1();
}
if (linesMultipleDelims.length > 0){
doSomething2();
}
doSomething();
}
我正在测试此代码并打开了一些有效的测试文件,但程序错误地执行了else分支(包含两个if检查,检查哪个数组是空的)并抱怨文件无效。 所以我使用Firefox调试器调试了问题:执行了最后一个分支(因为带有&&的if分支没有以某种方式评估为true),但是else分支中的2个小if语句都没有被评估为真正! 奇怪吧? 2个数组如何不等于空数组([])(因此长度大于0),但它们的长度为0?我确认这两个数组确实是空的:它们都在FF调试器中显示为'Array [0]'。
然后我换了:
linesMissingDelim === [] && linesMultipleDelims === []
使用:
linesMissingDelim.length === 0 && linesMultipleDelims.length === 0
现在,代码突然正常运行了!
基本上我的问题是如何
anArray === [] -> false
当:
anArray.length === 0 -> true
和anArray字面上定义为[]?