سؤال

لقد كنت أستخدم 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 يقول حقًا "هل أنت متأكد من أنك يجب أن تستخدم هذه القيمة لم يتم تعيينها".

إن الطريقة التي أميز بها هي غير محددة "لم أحدد هذه القيمة" ، وكونه لاغري "لقد حددت هذه القيمة ، لكنني لا أعرف أو لا أستطيع معرفة ما يجب أن تكون عليه القيمة".

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top