所以我有这段代码,我想做的是解析两个单词之间的内容,例如: “开始中间结束”应该返回中间。 如果句子是“Start middle end.Start middle2 end”,它应该返回一个包含“middle”和“middle2”的数组。
问题是:
当我调用名为 FindAll 的函数时,我得到了 undefined object 。我用来测试它的警报还说任何参数都等于 undefined object
你可以在你的 Firebug 上运行它,你就会看到。
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);
最佳答案
问题出在您的 toString
方法上。这不是你想的那样。只需将 end
传递给 alert()
即可。
alert(end);
<小时/>
您使用的toString()
是window.toString
。我不知道这是否是标准方法,但它基本上是 Object.prototype.toString
的快捷方式。
当调用Object.prototype.toStirng
时,它期望其this
值是某个对象,它将为其返回其内部[[Class]]
属性。由于您没有设置 this
值,因此它返回 [object Undefined]
(因为您处于严格模式)。
如果您这样做了:
toString.call(end)
它会返回[object String]
,这是正确的,但不是您想要的。
关于javascript - 函数的参数未定义,但我称其为传递所有必要的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24785008/