أحمد عبد الله2 نشر 13 مارس 2022 أرسل تقرير نشر 13 مارس 2022 (معدل) اقوم بجلب الداتا من api واريد استخدام الشفرة التالية arrData?.users[0]?.address لكن تاتى مشكلة هنا وهى TypeError: undefined is not an object (evaluating 'arrData.users[0]') انا وضعت علامة الاستفهام للتحقق ولحل المشكلة ولكن المشكلة لم تحل .. هل اقوم باستخدام هذه العلامة بشكل خاطئ ؟ تم التعديل في 16 مارس 2022 بواسطة Wael Aljamal توضيح السؤال 1 اقتباس
1 Wael Aljamal نشر 16 مارس 2022 أرسل تقرير نشر 16 مارس 2022 تدعى هذه الخاصية بالتسلسل الاختياري 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 Adnane Kadri نشر 13 مارس 2022 أرسل تقرير نشر 13 مارس 2022 يتم استعمال هاته العلامة في سياق الجافاسكربت بما يعرف بالمعامل الثلاثي 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) : ''; : ''; اقتباس
السؤال
أحمد عبد الله2
اقوم بجلب الداتا من api واريد استخدام الشفرة التالية arrData?.users[0]?.address لكن تاتى مشكلة هنا وهى
TypeError: undefined is not an object (evaluating 'arrData.users[0]')
انا وضعت علامة الاستفهام للتحقق ولحل المشكلة ولكن المشكلة لم تحل .. هل اقوم باستخدام هذه العلامة بشكل خاطئ ؟
تم التعديل في بواسطة Wael Aljamalتوضيح السؤال
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.