عندما يعيد JavaScript Null وغير محدد؟
-
21-09-2019 - |
سؤال
لقد كنت أستخدم JavaScript لبضع سنوات ولم أهتم أبدًا بالفرق بين null
& undefined
في وقت سابق ، أنا دائما أستخدم undefined
للتحقق من صحة وجود الكائن.
لكنني جئت مؤخرًا هذه المقالة. هنا قالوا
يميز JavaScript بين NULL ، وهو كائن من النوع "كائن" يشير إلى عدم وجود قيمة غير متعمدة ، وغير محددة ، وهو كائن من النوع "غير محدد" يشير إلى قيمة غير ضائعة-أي ، لا توجد قيمة تم تعيينه حتى الآن. سنتحدث عن المتغيرات لاحقًا ، ولكن في JavaScript ، من الممكن إعلان متغير دون تعيين قيمة له. إذا قمت بذلك ، فإن نوع المتغير غير محدد.
أنا مرتبك تمامًا الآن ، ما هو بالضبط عدم القيمة هنا. كيف يختلف هذا غير القيمة undefined
. وما هي الظروف التي تعود جافا سكريبت null
.
لقد جربت العينة أدناه
var sam;
alert(sam); // returns undefined
و
try {
//var sam;
alert(sam);
} catch(ex) { } // exception says: sam is undefined
ولست متأكدًا من متى يعود JS. هل يمكن لشخص أن يوضحني.
المحلول
تنبيه (سام) ؛ // إرجاع غير محدد
كلا ، هذا استثناء.
لقد حصلت undefined
عند الوصول إلى خاصية غير محددة ؛ يمكنك الحصول على خطأ عند استخدام اسم غير مستقر مباشرة.
المتغيرات العالمية مثيرة للاهتمام لأنه يمكن الوصول إليها إما باستخدام اسم متغير بسيط ، أو باستخدام خصائص window
كائن عالمي:
alert(window.sam); // undefined
alert(window['sam']); // undefined
alert('sam' in window); // false
alert(sam); // ERROR
لو sam
تم إعلانه ولكن لم يتم تهيئته ، وصوله window.sam
لا يزال يحصل عليك undefined
, ، ولكن لسبب مختلف: هناك إدخال في window
اعتراض sam
, ، لكنه يشير إلى نفس الشيء undefined
كائن عند حصولك عند الوصول إلى خاصية غير موجودة.
var sam;
alert(window.sam); // undefined
alert(window['sam']); // undefined
alert('sam' in window); // ** true
alert(sam); // ** undefined
هذا بالطبع فوضى دموية مربكة. undefined
هي واحدة من أسوأ الأخطاء في تصميم لغة جافا سكريبت.
null
من ناحية أخرى ، يعمل على ما يرام ويعمل إلى حد كبير مثل قيم NULL/NIL/VOID/NONE بلغات أخرى. لا يأتي في أي مما سبق.
نصائح أخرى
<script type="text/javascript">
// variable with an unasigned value
var a;
if (a == undefined) {
alert('a is undefined');
}
if (a == null) {
alert('a is undefined');
}
// this will produce an error
if (b == undefined) {
alert('b is undefined');
}
// this is the right way to handle not defined variables
if (typeof(c) == 'undefined') {
alert('c is blabla');
}
</script>
للحصول على متغير لتلقي قيمة فارغة ، يجب تعيينه. null
يستخدم للإشارة إلى قيمة غير معروفة أو لا تهتم. undefined
من ناحية أخرى ، تم تصميمه للإشارة إلى أن propery التي يتم الوصول إليها لم تُعين Ben بقيمة. هذا يختلف عن null
.
مع null
أحدهما يقول عمداً "لا أعرف ما هي القيمة التي ينبغي أن يكون لها هذا بعد" أو "لا أهتم ما هي القيمة التي هي الآن". في undefined
يقول حقًا "هل أنت متأكد من أنك يجب أن تستخدم هذه القيمة لم يتم تعيينها".
إن الطريقة التي أميز بها هي غير محددة "لم أحدد هذه القيمة" ، وكونه لاغري "لقد حددت هذه القيمة ، لكنني لا أعرف أو لا أستطيع معرفة ما يجب أن تكون عليه القيمة".