当anArray.length === 0在Javascript中时,为什么anArray === []评估为true?

时间:2015-07-19 12:32:21

标签: javascript arrays

我有以下代码:

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字面上定义为[]?

0 个答案:

没有答案