2014-07-16 19 views
0

所以我有這段代碼,我想要做的是解析兩個單詞之間的內容,如: 「開始中間結束」應該返回中間。 如果句子是「開始中間結束,開始middle2結束」,它應該返回一個包含「middle」和「middle2」的數組。功能的參數是未定義的,但我稱它通過了所有必要的參數

的問題是:

當我調用這就是所謂的FindAll的功能,我得到和未定義的對象。我用來測試它的警報還說任何參數都等於一個未定義的對象

你可以在你的螢火蟲上運行它,你會看到。

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); 
+2

@RevanProdigalKnight不,它不是 –

+0

我認爲這不是因爲在調用第一個函數findWithin()時它起作用。 如果findWithin()工作正常,我認爲findAll()也應該正常工作。 – lucasfcosta

回答

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],這將是正確的,但不是你想要的。

+0

好吧,它現在顯示傳遞給最終變量的正確值,但是我在函數結尾處的出現仍然未定義。 但我認爲它解決了這個問題。現在我又遇到了另一個問題。 感謝您回答我的主要問題,現在我還有其他要問的問題。 謝謝! – lucasfcosta

+0

不客氣。 –

相關問題