JavaScript输入相同,输出不同?

时间:2012-09-16 10:46:13

标签: javascript variables

我正在重写我的一个脚本,遇到了一个我无法弄清楚的问题。 command是一个输入变量,现在我运行了这个测试(两个正则表达式是相同的):

var parts = command.match(/([^\s"]+(?=\s*|$))|(".+?")/g);
console.log(command === "view -10 10 -10 10");
console.log(parts);
console.log(String("view -10 10 -10 10").match(/([^\s"]+(?=\s*|$))|(".+?")/g));

控制台现在说

true
[]
["view", "-10", "10", "-10", "10"]

这让我完全糊涂了。为什么command在使用===时等于我的测试字符串时,不会以相同的方式分离?

1 个答案:

答案 0 :(得分:1)

来自OP

以下是整个问题的解决方案: 该计划的基本结构如下

while (<condition>) {
    var command = getNextCommand();

    var parts = command.match(/([^\s"]+(?=\s*|$))|(".+?")/g);
    processParts(parts);
}

其中processParts()操纵了论点:

function processParts(parts) {
    var foo = parts.shift();
    doSomethingElse(foo);
}

这导致主例程中的parts缩小,并且在我的代码中processParts实际上shift编辑了所有元素,导致console.log(parts)在记录时写入一个空数组延迟(见dystroy的评论)。

最重要的是,我的processParts()函数出现了一个我没有注意到的错误,这就是我责备空parts的错误。在修正了这个错误后,上面的代码再次起作用了,因为我不再需要parts了,并且可以忍受它缩小了。总的来说,你可能想要注意这一点,但是...... JavaScript做了一些奇怪的事情。