私はこのコードを持っています:
_var phrase = function (variable, defaultPhrase) {
if (typeof variable === "undefined") {
return defaultPhrase;
}
else {
return variable;
}
}
_
次のように呼ばれます:
_Ext.Msg.show({title: phrase(js_shutdown,'Shutdown'), //...
_
私がしたいのは、変数が定義されていないときにデフォルトのフレーズを使用することですが、未定義の変数をphrase()
に渡すと、JSは未定義の変数エラーをスローします。どうすれば修正できますか?これを行うための他のアイデアはありますか?
関数は必要ありません。通常、||
演算子が使用されます。
Ext.Msg.show({ title: js_shutdown || 'Shutdown', //...
||
は次のように表示されます。
someValue || defaultValue
文字列の場合、someValue === ""
の場合はdefaultValue
が使用されます。
変数がまったく定義されていない場合、関数に変数を渡すことができないため(ReferenceError
)、typeof x === "undefined"
チェックをインライン化する必要があります。
通常、||
で十分です、他の人が示唆しているように。ただし、許容値として0、false、およびnullを使用する場合は、変数の型が未定義であるかどうかを確認する必要があります。三項演算子を使用して、ワンライナーにすることができます。
var variable;
var defaultPhrase = "Default";
var phrase = (typeof variable === "undefined" ? defaultPhrase : variable);
console.log(phrase);
// => "Default"
関数呼び出しでスコープのない未定義の変数を参照すると、javascriptエラーになります。したがって、変数_js_shutdown
_がスコープ内に存在しない場合、次のようになります。
_Ext.Msg.show({title: phrase(js_shutdown,'Shutdown'), //...
_
エラーです。
たとえば、次のコードは、phrase()
関数を呼び出す行でエラーを引き起こします。
_var Ext = {};
Ext.Msg = {};
Ext.Msg.show = function() {console.log("success")};
function phrase(variable, defaultPhrase) {
return(variable || defaultPhrase);
}
Ext.Msg.show({title: phrase(js_shutdown,'Shutdown')});
_
javaScriptエンジンはどのスコープでもjs_shutdownを見つけることができないためです。
しかし、これは大丈夫です:
_var Ext = {};
Ext.Msg = {};
Ext.Msg.show = function() {console.log("success")};
function phrase(variable, defaultPhrase) {
return(variable || defaultPhrase);
}
Ext.Msg.show({title: phrase(window.js_shutdown,'Shutdown')});
_
これがここで機能することがわかります: http://jsfiddle.net/jfriend00/JFz6R/
Js_shutdownを探す場所を正確にJSエンジンに伝えたので、そこにない場合は、(必要に応じて)未定義をフレーズ関数に渡します。
JavaScriptでは、通常OR演算子||
は、変数が未定義の場合に代替値を提供します。
return variable || defaultPhrase || ''
variable
が未定義の場合、falseと評価され、テストの2番目の部分が評価されます。これも未定義の場合、空の文字列を返すことができます。
logical OR operator :を使用します
var phrase = variable || defaultPhrase;
またはインライン:
Ext.Msg.show({title: (js_shutdown || 'Shutdown')), //...
通常、セキュリティ上の問題がない限り、title: js_shutdown || 'Shutdown'
のようにコーディングします。