2013-10-31 28 views
16

我有一個javascript函數接受一個可選參數。這Firefox工作正常,但在Google Chrome它表明: -未捕獲的SyntaxError:意外的令牌=谷歌Chrome中

Uncaught SyntaxError: Unexpected token = 

我的代碼,

function errorNotification(text = "Something went wrong!") { 
    $.pnotify({ 
     title: 'Error', 
     text: text, 
     type: 'error' 
    }); 
} 

我見過很多類似的問題,但我無法實現我的問題。

回答

32

您正在使用僅支持Firefox的default parameter功能。

function errorNotification(text) { 
    text = text || "Something went wrong!"; 
    $.pnotify({ 
     title: 'Error', 
     text: text, 
     type: 'error' 
    }); 
} 
+0

現在它顯示''未捕獲的SyntaxError:意外的標記;''爲行''文本= typeof運算文本== '未定義'? 「出了些問題!」 ||文本;'' – devo

+0

@devo現在是錯誤修正了 –

+0

好吧,明白了。你能解釋爲什麼Firefox中沒有錯誤嗎? – devo

6

JavaScript不允許您傳遞類似的默認參數。您需要在內部爲該功能分配默認值。

function errorNotification(text) { 
    text || (text = "Something went wrong!"); 
    $.pnotify({ 
     title: 'Error', 
     text: text, 
     type: 'error' 
    }); 
} 
+0

是的。它正在工作。你能解釋爲什麼它在Firefox中工作嗎? – devo

+0

聽到這個我很驚訝。如果它在Firefox中工作,那麼Firefox必須以某種方式原諒您的無效語法,否則問題只會被吞噬掉,所以您沒有注意到它。你的原始代碼是無效的Javascript語法,所以它應該在每個地方都拋出一個錯誤,除非在JS實現中有一個錯誤。 –

+2

@devo當[ECMAScript 6](http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts)最終確定時,默認參數值應該成爲語言的一部分。 Mozilla剛剛增加了對它的支持。 –

0

function [a-zA-Z0-9_]*?\s{0,}\([^=$)]*?(=)[^)$]*?\)找到具有默認參數的js函數,然後糾正它們可能會有幫助。

+0

我將如何去使用它來查找功能? – cjbarth

1

注意:如果您有一個布爾值,您希望默認爲true,其他答案將不起作用。這是因爲anything||true將始終返回true。相反,你應該這樣做:

function foo(bar){ 
    if(bar === undefined) 
    bar = true; 
    //rest of your function 
} 
相關問題