17

PHP関数をJavaScriptに移植することに関連する質問を見ながら。私が想定したのは間違ったJavaScriptであることがわかりました。

function my_isnum(str, negative=false, decimal=false)

それから私はJSFiddleでこれを試しました:

function my_isnum(str, negative=false, decimal=-2)
{
    console.log(arguments);
    console.log(str);
    console.log(negative);
    console.log(decimal);
}
my_isnum("5", "Hi");

そして驚いたことに、これはFirebugコンソールに表示されるものです。

["5", "Hi"]
5
Hi
-2

今Chromeでこれは私が見るものです:

Uncaught SyntaxError: Unexpected token = 

私が理解していないのは、これがFirefoxでサポートされている初期の標準の例です(MDNfunctionはこれについて言及していないようです)。

4

3 に答える 3

18

これは ECMAScript 6 仕様にあるようで、現時点では Firefox でのみサポートされています。

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/default_parameters

于 2013-02-02T00:08:28.833 に答える
8

Lostsource の答えは正しいです。ECMA6 が来ると、デフォルト値がサポートされる可能性が非常に高くなります。サポートされると思いますが、まだ作業中のドラフトであるため、確実ではありません...今のところ、論理または:

function foo(bar, foobar)
{
    bar = bar || 'foobar';//once
    foobar = foobar || !!bar || true;//or multiple times

これは、三項式のように機能します。式は左から右に解決されます: JS が真の値に遭遇するとすぐに、それが割り当てられます:

var someVar = false || undefined || null || 0 || 1;

に 1 を割り当てsomeVarます。関数に値が渡されない場合、undefinedデフォルトですべての引数が割り当てられるため、その場合は次のようになります。

myArgument = myArgument || 'default';
//is the same as:
myArgument = undefined || 'default';//evaluates to "default"

falseただし引数に ornullや空文字列を渡すとデフォルト値が代入されるので注意が必要です。
そのような場合、if/ternary の方が適しています (theJollySin の回答に見られるように)。これに相当する 3 進数は次のとおりです。

some_val = typeof some_val === 'undefined' ? 'default' : some_val;
于 2013-02-02T00:28:05.120 に答える
4

並べ替え。次のようなことができます:

function the_func(some_val) {
    // if some_val is not passed to the_func 
    if (typeof some_val == 'undefined') {
        some_val = 'default_some_val';
    }

    // now you can use some_val in the remaining parts of the method
}
于 2013-02-02T00:07:00.333 に答える