عامل الثلاثي المختصر في جافاسكريبت


أعلم أنه في 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.