عامل الثلاثي المختصر في جافاسكريبت
أعلم أنه في PHP 5.3 بدلاً من استخدام هذا الصياغة الزائدة لمعامل الثلاثي:
startingNum = startingNum ? startingNum : 1
...يمكننا استخدام صياغة مختصرة لمعاملات الثلاثية حيثما كان ذلك ممكنًا:
startingNum = startingNum ?: 1
وأنا أعرف عن المعامل الثلاثي في جافاسكريبت:
startingNum = startingNum ? startingNum : 1
...لكن هل هناك اختصار؟
الإجابة رقم 1
var startingNumber = startingNumber || 1;
شيء مثل هذا ما تبحث عنه، حيث يتم استخدام القيمة الافتراضية إذا لم يتم تعريفها؟
var foo = bar || 1; // 1
var bar = 2;
foo = bar || 1; // 2
بالمناسبة، هذا يعمل في العديد من السيناريوهات، بما في ذلك الأشياء:
var foo = bar || {}; // secure an object is assigned when bar is absent
الإجابة رقم 2
|| ستعيد أول قيمة صحيحة تواجهها، وبالتالي يمكن استخدامها كعامل دمج مشابه ل ?? في C#
startingNum = startingNum || 1;
الإجابة رقم 3
مع إضافة ES2020:
جديد مع الدمج الصفري: const difficulty=var?.nest[i]?.prop ?? false
العملية القديمة: const difficulty=var.nest[i].prop ? var.nest[i].prop : false
علامة السؤال قبل الخاصية ستتحقق أولاً مما إذا كان الكائن موجودًا أصلاً (إذا لم تكن متأكدًا من ذلك: مثل بيانات واجهة برمجة التطبيقات) وإذا كان الكائن مفقودًا، فستعيد undefined
رمز ?? يتحقق مما إذا كانت القيمة الموجودة على اليسار null أو undefined وإذا كانت كذلك، فسيُرجع قيمة محددة على اليمين.
الإجابة رقم 4
نعم، هناك:
var startingNum = startingNum || 1;
بشكل عام، expr1 || expr2 تعمل بالطريقة التالية (كما هو مذكور في الوثائق):
يعيد
expr1إذا كان يمكن تحويله إلىtrue؛ وإلا، يعيدexpr2. وهكذا، عند استخدامه مع قيمBoolean، يعيد||trueإذا كان أي من العاملينtrue؛ وإذا كان كلاهماfalse، يعيدfalse.
