ما هي طريقة موجزة وقوية لكتابة هذه البيانات في جافا سكريبت؟

StackOverflow https://stackoverflow.com/questions/1720032

سؤال

انا لديu003Ciframe> يستخدم هذا المتغيرات التي يتم تعيينها في كائن حرفي في المستند الأصل. هذه المتغيرات اختيارية؛ إذا تم تعيينها، أريد استخدام قيمها، وتعيينها إلى متغير عالمي أكثر إيجازا؛ إذا لم يكن الأمر كذلك، أريد استدعاء خطأ الوظيفة ().

بادئ ذي بدء، هل هذا بيان المشغل الفاحص صالح وفعال لما أريد القيام به؟ هل هناك أي مصائد محتملة هنا؟

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') { ... }

هل هناك شيء أكثر قوة و / أو موجزة؟ شكرا لأي نصيحة.

هل كانت مفيدة؟

المحلول

هذا خطأ:

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

تقصد أن تقول:

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

او حتى:

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

نصائح أخرى

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;

[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 ) و إذا foo غير محدد لن يتم إلقاء خطأ صارم ولكنه سوف يساوي فقط غير محدد، على افتراض أن الوالد محدد دائما.

إذا تم تعريف الإعدادات و polling_interval ليست، نفس الحالة. إذا كنت متأكدا من تعيين الممتلكات وسيوجه كائن الإعدادات، فيمكنك استخدامه

if ( parent.settings.polling_interval ) { }

سوف يساعد في تفويض ما error() فعلا يفعل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top