1

我现在正在重写我的一个脚本,遇到了一个我无法弄清楚的问题。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即使在使用时它也等于我的测试字符串时也不以相同的方式分开===

4

1 回答 1

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 做了一些奇怪的事情。

于 2012-09-17T07:55:11.190 回答