函数的参数是Undefined,但我调用它传递所有必要的参数

时间:2014-07-16 15:39:38

标签: javascript

所以我有这些代码,我想要做的是解析两个单词之间的内容,例如: “开始中间结束”应该回到中间位置。 如果句子是“开始中间结束。开始mid2结束”,它应该返回一个包含“middle”和“middle2”的数组。

问题是:

当我调用名为FindAll的函数时,我得到了Undefined Object。我用来测试它的警报也说任何参数都等于未定义的对象

你可以在你的萤火虫上运行它,你会看到。

function findWithin(text, start, end, include) {
    "use strict";
    var stringExists = (text.indexOf(end) === -1),
        startPosition = text.indexOf(start),
        endPosition = text.indexOf(end),
        tMatch = [2];
    tMatch[0] = text.slice(endPosition + end.length, text.length);
    if (!stringExists) {
        if (include) {
            tMatch[1] = text.slice(startPosition, endPosition + end.length);
        } else {
            tMatch[1] = text.slice(startPosition + start.length, endPosition);
        }
    } else {
        tMatch[2] = false;
    }
    return tMatch;
}

function findAll(text, start, end, include) {
    "use strict";
    alert(toString(end));
    var findWithinVar = findWithin(text, start, end, include),
        occurrences = [],
        i = 0;
   // alert(toString(findWithinVar[2]));
    for (i; findWithinVar[2]; i++) {
        occurrences[i] = findWithinVar[1];
        findWithinVar = findWithin(text, start, end, include);
    }
    return occurrences;
}

var text = "Start middle end. Start middle end. Start middle end.",
    start = "Start",
    end = "end",
    result = findAll(text, start, end, false);

1 个答案:

答案 0 :(得分:1)

问题在于您的toString方法。这不是你的想法。只需将end传递给alert()即可。

alert(end);

您使用的toString()window.toString。我不知道这是否是一种标准方法,但它基本上是Object.prototype.toString的捷径。

调用Object.prototype.toStirng时,它希望其this值成为某个对象,它将返回其内部[[Class]]属性。由于您没有设置this值,因此您返回[object Undefined],因为您处于严格模式。


如果您这样做了:

toString.call(end)

它会返回[object String],这本来是正确的,但不是你想要的。