9

理想的には、次のようなものを書きたいと思っています。

function a( b ) {
    b.defaultVal( 1 );
    return b;
}

これの目的は、がb定義された値でbある場合、その値のままになることです。ただし、bが未定義の場合はb、のパラメータで指定された値defaultVal()(この場合は)に設定されます1

これも可能ですか?

私はこのようなものをいじっています:

String.prototype.defaultVal=function(valOnUndefined){
    if(typeof this==='undefined'){
        return valOnUndefined;
    }else{
        return this;
    }
};

しかし、この種のロジックを変数、特に未定義の変数に適用することに成功していません

誰かがこれについて何か考えを持っていますか?できますか?それとも私は間違った木を吠えていますか?

4

3 に答える 3

11

デフォルトの演算子を使用しないのはなぜですか。

function someF(b)
{
    b = b || 1;
    return b;
}

仕事は終わりました!それがどのように機能するかについての詳細はここにあります。

補足として、プロトタイプを拡張しているため、プロトタイプは機能しませんStringが、変数が定義Stringされていない場合、プロトタイプは正確には適用されません。

絶対に、超大げさです-デフォルト値にのみ切り替えていることを確認してください。b実際に定義されていない場合は、次のようにすることができます。

var someF = (function(undefined)//get the real undefined value
{
    return function(b)
    {
        b = b === undefined ? 1 : b;
        return b;
    }
})(); // by not passing any arguments
于 2012-09-13T15:37:40.907 に答える
9

ここで学ぶべき最も重要なことは、変数がundefinedあなたであるかどうかです。デフォルトでは、使用可能なメソッドがありません。したがって、変数を操作できるが、その変数のメンバー/メソッドはないメソッドを使用する必要があります。

次のようなものを試してください:

function defaultValue(myVar, defaultVal){
    if(typeof myVar === "undefined") myVar = defaultVal;
    return myVar;
}

あなたがやろうとしていることはこれと同等です:

undefined.prototype.defaultValue = function(val) { }

...明らかな理由で、機能しません。

于 2012-09-13T15:35:24.087 に答える
2

すでに提供されている2つの答えは正しいですが、それ以来、言語は進歩しています。ターゲットブラウザがサポートしている場合は、次のようなデフォルトの関数パラメータを使用できます。

function greetMe(greeting = "Hello", name = "World") {
  console.log(greeting + ", " + name + "!");
}

greetMe(); // prints "Hello, World!"
greetMe("Howdy", "Tiger"); // prints "Howdy, Tiger!"

デフォルトの関数パラメータに関するMDNドキュメントは次のとおりです

于 2017-01-05T13:36:27.163 に答える