2016-04-12 33 views
1

JavaScript中是否有方法或方法可以檢查是否通過使用if語句來聲明函數是否返回值?檢查函數是否使用if語句

所以這個:

function(val) { 
    if (val) return "it is true"; 
    return "it is false"; 
} 

與此:

function(val) { 
    var str = 'it is '; 
    return str += val; 
} 

我一直在四處尋找,只能找到與Java或其他語言的文章。提前致謝。編輯:我正在寫測試來斷言函數(由用戶編寫)是否利用if語句。希望澄清一點!

+4

我的問題將是,爲什麼你想知道一個函數是否使用條件?如果滿足某些條件,您可以輕鬆設置一些值。但爲什麼? – Ibu

+8

如果你需要這樣做,你做錯了! – John3136

+3

[什麼是XY問題?](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) –

回答

2

首先我想提一下,這樣的檢查不應該用在代碼中,我的意思是正確的代碼不應該檢查if語句是否在函數內部使用。無論是否返回值,都不應該檢查或測試。


但是,要回到主題。我不太確定這是否可以開箱即用。不過,我確實有一個解決方案,您可以使用它來實現與您的目標類似的內容。

您可以將給定的函數轉換爲它的字符串表示形式。看看下面的例子:

// Define a function 
var myFunction = function() { 
    return 1 + 3; 
}; 

// Print the function, as a string 
console.log(myFunction.toString()); 

這段代碼將打印在控制檯功能的字符串表示,所以這將是function() { return 1 + 3; }。某些環境(例如Firefox)會返回該函數的編譯版本,它看起來像function() { return 4; },但對我們的使用沒有任何影響。

使用此方法,您將能夠檢查給定函數是否包含if語句。此類代碼如下所示:

// Define a function 
var myFunction = function() { 
    return 1 + 3; 
}; 

// Check whether the given function contains an if-statement 
if(myFunction.toString().indexOf('if') > -1) { 
    console.log('This function does contain an if-statement'); 
} else { 
    console.log('This function does not contain an if-statement'); 
} 

此方法對於您的情況並不理想,但它可能會指向正確的方向。請注意,這種方法不是一種堅如磐石的解決方案,至少在這種情況下不是。在函數中使用'if'作爲字符串(或其他)也會導致上面的代碼說函數包含一個if語句。另外,這並不會顯式檢查值是否從if語句內部返回。

如果你想確保上面提到的事情(使用真正的if語句,其中返回一個值),你可能需要修改上面的代碼,使其更聰明,如果這個字符串 - 基於方法適合您的需求。然後,我強烈建議在它周圍寫一個花哨的包裝,以使其更易於使用。

+1

謝謝!這絕對是指向正確的方向。 – Jose