18

Javascript で次のようなものを見ました:

   function name (secret) {
          secret = secret || {};

secret = secret || secret = secret ||を正確に意味するものはどこにも見つかりません。{};

渡された引数またはオブジェクトの値でグローバル変数を作成するということですか?

いつ使うの?引数が渡されない場合は?

4

1 に答える 1

26

その意味

変数secretが偽の場合 (次のいずれか):

  • false
  • 0
  • ''(空文字列)
  • null
  • undefined
  • NaN

..次に、{}(空のオブジェクト - と同じnew Object()です) に設定します。


代替コード

次のように書くこともできます。

if (!secret) secret = {};

しかし、より長いため、ほとんどの人は上記を好みます。


なんで?

JavaScript にはデフォルトの関数パラメーターがないため、このソリューションは便利です。

たとえば、PHP の例は次のようになります。

<?php
    function foo($bar = 'default') {
        echo $bar;
    }
?>

そしてJSでは

function foo(bar) {
    bar = bar || 'default';
    console.log(bar);
}
foo(); //default
foo(NaN); //default
foo(undefined); //default
foo(null); //default
foo(false); //default
foo(0); //default
foo(''); //default
foo('something'); //something
foo(12); //12
foo(1.2); //1.2

他に何も設定されていない場合にデフォルトのみを設定したい場合はどうすればよいですか?

値がない (偽の値がない)ことだけtypeofを確認したい場合は、JS で関数を使用できます。

function foo(bar) {
    if (typeof bar == 'undefined') bar = 'default';
    console.log(bar);
}
foo(); //default
foo(undefined); //default
foo(NaN); //NaN
foo(null); //null
foo(false); //false
foo(0); //0
foo(''); //(empty string)
foo('something'); //something
foo(12); //12
foo(1.2); //1.2
于 2012-10-22T17:06:51.277 に答える