0

親ドキュメントのオブジェクト リテラルに設定されているいくつかの変数を使用する <iframe> があります。これらの変数はオプションです。それらが設定されている場合は、それらの値を使用して、より簡潔なグローバル変数に割り当てます。そうでない場合は、関数 error() を呼び出します。

まず、この三項演算子文は自分のやりたいことに有効で有効でしょうか?ここに潜在的なトラップはありますか?

parent.settings.account ? var account = parent.settings.account : error();

第二に、そのステートメントを書くためのより簡潔な方法はありますか?

これらの変数のいくつかはオプションですが、定義されている場合、許容値の範囲があります。これを処理するための堅牢な方法は何ですか? このようなもの?

if (parent.settings.polling_interval && parent.settings.polling_interval >= 1000 && parent.settings.polling_interval <= 5000) {
    var polling_interval = parent.settings.polling_interval;
} else {
  var polling_interval = 3000; // default
}

基本的に未定義や範囲外の場合はデフォルト値を使いたい。

次のような条件文だけに頼ることはできますか?

if (parent.settings.polling_interval) { ... }

または、このように未定義かどうかを確認する必要がありますか?

if (typeof parent.settings.polling_interval !== 'undefined') { ... }

より堅牢で簡潔なものはありますか?アドバイスをありがとう。

4

3 に答える 3

4

これは間違っています:

parent.settings.account ? var account = parent.settings.account : error();

あなたが言いたかったのは:

var account = parent.settings.account ? parent.settings.account : error();

あるいは:

var account = parent.settings.account || error();
于 2009-11-12T05:13:46.747 に答える
1
var account = parent.settings.account;
if (!account)
    error();

if ((p = parent.settings.polling_interval) && p >= 1000 && p <= 5000) {
   ...
}

var polling_interval = (p = parent.settings.polling_interval) && p >= 1000 && p <= 5000 ? p : 3000;
于 2009-11-12T05:18:33.293 に答える
1

[1]

parent.settings.account ? ( var account = parent.settings.account ) : error();

この方法では変数を定義できないため、これは SyntaxError を発生させます。

error()例外が発生した場合/エラーがスローされた場合は、次のことができます。

    if ( !parent.settings.account ) {
        error()
    }

// continue code

前述のように、変数をプロパティに割り当てることもできます。

var account = parent.settings.account || error();

[2]

  var pollingInterval = parent.settings.polling_interval &&
 parent.settings.polling_interval >= 1000 &&
 parent.settings.polling_interval <= 5000 ?
 parent.settings.polling_interval : 3000;

[3] if ( parent.foo )and if foois undefined を使用できますが、厳密なエラーはスローされませんが、親が常に定義されていると仮定すると、単に undefined になります。

設定が定義されていて polling_interval が定義されていない場合も同様です。プロパティが設定されており、設定オブジェクトが存在することが確実な場合は、次を使用できます

if ( parent.settings.polling_interval ) { }

error()実際に何をするかを述べるのに役立ちます。

于 2009-11-12T05:30:09.380 に答える