2016-12-13 3 views
2

で未定義置き換えます空の文字列としてとして初期化します。現在、私の関数は最初のケースでは機能しませんが、もう一方は機能しています。Javascriptのインラインは、私はこの機能を持って空の文字列

私はcallWS()のようにそれを呼び出すと、私が得る:

Uncaught TypeError: Cannot read property 'type' of undefined 

は、それが2と3の場合のために動作しますが、私は、それはまた、最初のケースのために働くようにする必要があり、なぜ私にはわからない正直に言うと。私はそれを知っている場合:

if (input["type"]) 

私はインラインソリューションが必要です。これは何とか可能ですか?

+4

。単に 'input = input ||を追加してください。 'callWS'の先頭に{}'を置きます。 – hindmost

+1

あなたの関数を 'function callWS(input = {})'として定義します。 –

+0

@torazaburo - プロジェクトにはES6が含まれていません – paulalexandru

答えて

4

input変数自体にもデフォルト値を指定する必要があります。

function callWS(input) { 
    input = input || {}; 
    ... 
} 

そうしないと、unexistingのプロパティ(あなたが今持っているもの)エラーにつながる(未定義の)オブジェクトにアクセスします。

一方、既存のオブジェクトの既存のプロパティにアクセスすることは、JSではエラーとして処理されません。

+1

はい@torazaburoを使用していませんが、彼はプロパティが作成されていて定義されていないオブジェクトを望んでいます –

+0

@torazaburo ok今、私は理解しています、 –

0

ES6では、ここでES6を含まない別のアプローチだ

function callWS({type = "", mark = "", model = "", year = ""} = {}) { 
    return {type, mark, model, year}; 
} 

としてこれを書きます。多くのライブラリには、defaultユーティリティが含まれています。ユーティリティは、別のオブジェクトが見つからない場合、そのオブジェクトにいくつかのプロパティを適用します。次のように

function deflt(obj, defaults) { 
    var keys = Object.keys(defaults); 
    for (var i = 0; i < keys.length: i++) { 
    var key = keys[i]; 
    if (!(key in obj)) obj[key] = defaults[key]; 
    } 
    return obj; 
} 

あなたはこれを使用することができます:

function callWS(input) { 
    input = input || {}; 
    deflt(input, {type: "", mark: "", model: "", year: ""}); 
    return input; 
} 

注:書かれたとして、これは入力の修正版を返します。必要でない場合は、必要に応じて調整してください。

+0

残念ながら、このプロジェクトではES6 – paulalexandru

0

独自のextendメソッドを記述して使用することができます。 このようにして、既定のオブジェクトを持つことができます。既定のオブジェクトはデフォルトの値にしてから、関数に渡されたオブジェクトとマージできます。あなたも、デフォルト値を使用して自身input` `供給する必要が

function extend(a, b){ 
 
    for(var key in b){ 
 
     if(b.hasOwnProperty(key)){ 
 
      a[key] = b[key]; 
 
     } 
 
    } 
 

 
    return a; 
 
} 
 

 
function callWS(input) { 
 
    var defaultInput = { 
 
     "type": "", 
 
     "mark": "", 
 
     "model":"", 
 
     "year": "" 
 
    } 
 
    
 
    var output = extend(defaultInput, input); 
 

 
    return output; 
 
} 
 

 
console.log(callWS()); 
 
console.log(callWS({"type":"moto"})); 
 
console.log(callWS({"type":"moto","mark":"audi"}));

関連する問題