اذهب إلى المحتوى
  • 0

اريد ان استخدم علامة التسلسل الاختياري Optional chaining بطريقة صحيحة فى الجافا سكريبت JavaScript باستعمال رمز الاستفهام "؟"

أحمد عبد الله2

السؤال

اقوم بجلب الداتا من api واريد استخدام الشفرة التالية arrData?.users[0]?.address لكن تاتى مشكلة هنا وهى 

 

TypeError: undefined is not an object (evaluating 'arrData.users[0]')

 

انا وضعت علامة الاستفهام للتحقق ولحل المشكلة ولكن المشكلة لم تحل .. هل اقوم باستخدام هذه العلامة بشكل خاطئ ؟

تم التعديل في بواسطة Wael Aljamal
توضيح السؤال
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

تدعى هذه الخاصية بالتسلسل الاختياري Optional chaining ولطن الخطأ لديك ليس بسببها على ما أظن، تأكد من بنية المتغيرات لديك هل هو كائن صحيح به الخاصيات أم كلا.

الشكل العام للخاصية:

obj.val?.prop
obj.val?.[expr]
obj.arr?.[index]
obj.func?.(args)

تعمل الخاصية على ضمان عدم ظهور خطأ عند طلبي خاصية فرعية من خاصية أخرى ضمن غرض برمجي يمكن لأحد القيم فيه أن تكون null فنتجنب حدوث خطأ.

let user = {}; // تحدث للمستخدم ‫user في حالة كان ليس لديه عنوان

alert(user.address.street); // خطأ!‫  

// بعد القليل من المعالجة المنطقة تصبح:

let user = {}; // إذا كان ‫user لا يملك عنوان

alert( user && user.address && user.address.street ); // undefined (أي ليس خطأً)

// ثم تم إضافة Optional chaining 

let user = {}; // إذا كان ‫user لا يملك عنوان

alert( user?.address?.street ); // undefined (ليس خطأً)

يمكنك قراءة المقالة:

 

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

يتم استعمال هاته العلامة في سياق الجافاسكربت بما يعرف بالمعامل الثلاثي ternary operator وهو بمفهومه البسيط ليس الا كتابة مختصرة لشرط if else المعروف.

فشرط مثل: 

if(i == 1){
   console.log('i is equal to one')
}else{
   console.log('i is not equal to one')
}

يصبح:

i == 1 ?
   console.log('i is equal to one')
:
   console.log('i is not equal to one');

في المثال لديك، أظن انك تحاول قراءة الخاصية users من الكائن arrData في حالة توفره. ثم  الخاصية addres في حالة توفر الفهرس 0. يترجم هذا الى: 

if(arrData){
   if(arrData.users[0]){
       console.log(arrData.users[0].address)
   }
}

ويختصر الى: 

arrData ?
   arrData.users[0] ?
       console.log(arrData.users[0].address)
   : '';
: '';

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...