كيفية التحقق من عدم تعريف متغير في جافا سكريبت

StackOverflow https://stackoverflow.com/questions/858181

  •  21-08-2019
  •  | 
  •  

سؤال

أردت أن تحقق ما إذا كان يتم تعريف متغير أو لا.على سبيل المثال التالي يلقي ليس خطأ معرف من قبل

alert( x );

كيف يمكنني التقاط هذا الخطأ ؟

هل كانت مفيدة؟

المحلول

في جافا سكريبت، null هو كائن. هناك قيمة أخرى عن الأشياء التي لا وجود لها، undefined. لDOM يعود null لجميع الحالات تقريبا حيث فشلت في العثور على بعض هيكل في الوثيقة، ولكن في جافا سكريبت نفسه undefined القيمة المستخدمة.

وثانيا، لا، ليس هناك ما يعادل المباشر. إذا كنت تريد حقا أن تحقق من وجود خصيصا لnull، القيام به:

if (yourvar === null) // Does not execute if yourvar is `undefined`

إذا كنت تريد أن تحقق في حالة وجود متغير، التي يمكن أن يتم إلا مع try / catch، منذ typeof ستتعامل متغير غير معلنة ومتغير أعلن مع قيمة undefined كما يعادلها.

ولكن، للتحقق مما إذا تم التصريح متغير <م> و غير undefined:

if (typeof yourvar !== 'undefined') // Any scope

وحذار، هذا هراء، لأن قد يكون هناك متغير مع اسم undefined:

if (yourvar !== undefined)

إذا كنت تريد أن تعرف ما إذا كان يوجد عضو مستقل ولكن لا يهمني ما هي قيمته:

if ('membername' in object) // With inheritance
if (object.hasOwnProperty('membername')) // Without inheritance

إذا كنت تريد أن تعرف ما إذا كان المتغير هو truthy :

if (yourvar)

المصدر

نصائح أخرى

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

if (typeof someVar === 'undefined') {
  // Your variable is undefined
}

ووبعض الحلول الأخرى في هذا الموضوع تقودك إلى الاعتقاد متغير غير معرف على الرغم من أنه تم تعريف (مع قيمة NULL أو 0، على سبيل المثال).

ومن الناحية الفنية، والحل الصحيح هو (أعتقد):

typeof x === "undefined"

ويمكنك الحصول في بعض الأحيان كسول واستخدام

x == null

ولكن أن يسمح على حد سواء x متغير غير معروف، وx متغير يحتوي على قيمة خالية إلى العودة الحقيقية.

ونسخة أسهل وأكثر الاختزال ستكون كما يلي:

if (!x) {
   //Undefined
}

وOR

if (typeof x !== "undefined") {
    //Do something since x is defined.
}

ولقد فعلت كثير من الأحيان:

function doSomething(variable)
{
    var undef;

    if(variable === undef)
    {
         alert('Hey moron, define this bad boy.');
    }
}

ويمكنك أيضا استخدام الثلاثي مشروط مشغل:

var a = "hallo world";
var a = !a ? document.write("i dont know 'a'") : document.write("a = " + a);

//var a = "hallo world";
var a = !a ? document.write("i dont know 'a'") : document.write("a = " + a);

و"حل" آخر محتمل هو استخدام الكائن window. أنه يتجنب مشكلة خطأ مرجعية عندما تكون في المتصفح.

if (window.x) {
    alert('x exists and is truthy');
} else {
    alert('x does not exist, or exists and is falsy');
}

ونحن لا يمكن أن تحقق undefined على النحو التالي

var x; 

if (x === undefined) {
    alert("x is undefined");
} else {
     alert("x is defined");
}

أنا غالبا ما تستخدم أبسط طريقة:

var variable;
if (variable === undefined){
    console.log('Variable is undefined');
} else {
    console.log('Variable is defined');
}

تحرير:

دون تهيئة متغير استثناء سيتم طرح "غير مسك ReferenceError:متغير غير معرف..."

والجواب المقبول هو الصحيح. فقط أريد أن أضيف خيار واحد أكثر من ذلك. يمكنك أيضا استخدام كتلة try ... catch للتعامل مع هذا الوضع. وهناك مثال فظيع:

var a;
try {
    a = b + 1;  // throws ReferenceError if b is not defined
} 
catch (e) {
    a = 1;      // apply some default behavior in case of error
}
finally {
    a = a || 0; // normalize the result in any case
}

ويكون على بينة من كتلة catch، وهو فوضوي قليلا، كما أنه يخلق نطاق على مستوى الكتلة. وبطبيعة الحال، هذا المثال مبسط للغاية للرد على سؤال، أنه لا يغطي أفضل الممارسات في معالجة الأخطاء؛)

الخطأ أقول لك أن x لا وجود لها حتى!لم يكن أعلن, التي تختلف من كونها تعيين قيمة.

var x; // declaration
x = 2; // assignment

إذا كنت أعلن x, لن تحصل على خطأ.سوف تحصل على تنبيه بأن يقول undefined لأن x موجود/أعلنت ولكن لم يتم تعيين قيمة.

للتحقق إذا كان المتغير قد أعلن ، يمكنك استخدام typeof, أي طريقة أخرى للتحقق إذا كان المتغير موجود سيتم رفع نفس الخطأ الذي حصل في البداية.

if(typeof x  !==  "undefined") {
    alert(x);
}

هذا هو التحقق من نوع من القيمة المخزنة في x.وسوف يعود فقط undefined عندما x لم تكن معلنة أو إذا كان وقد أعلن ولم يتم تعيينها حتى الآن.

void عوائد مشغل undefined لأي حجة / التعبير مرت عليه. بحيث يمكنك اختبار ضد نتيجة (في الواقع بعض minifiers تغيير التعليمات البرمجية من undefined إلى void 0 لإنقاذ بضعة أحرف)

وعلى سبيل المثال:

void 0
// undefined

if (variable === void 0) {
    // variable is undefined
}

وأنا استخدم وظيفة صغيرة للتحقق من تم الإعلان عن المتغير، الذي يمر أسفل حقا على كمية من فوضى في ملفاتي جافا سكريبت. أود أن أضيف شيك لقيمة للتأكد من أن المتغير موجود ليس فقط، ولكن تم أيضا تعيين قيمة. الشيكات الشرط الثاني ما إذا كان قد تم أيضا إنشاء مثيل المتغير، لأنه إذا تم تعريف متغير ولكن لا مثيل (انظر المثال أدناه)، فإنه لا يزال الإلقاء خطأ إذا حاولت الرجوع انها قيمة في التعليمات البرمجية.

لا مثيل - var my_variable; مثيل - var my_variable = "";

function varExists(el) { 
  if ( typeof el !== "undefined" && typeof el.val() !== "undefined" ) { 
    return true; 
  } else { 
    return false; 
  } 
}

ويمكنك بعد ذلك استخدام عبارة شرطية لاختبار أن المتغير تم تعريف AND مثيل كلا من هذا القبيل ...

if ( varExists(variable_name) ) { // checks that it DOES exist } 

وأو لاختبار لم يتم تعريفه ومثيل استخدام ...

if( !varExists(variable_name) ) { // checks that it DOESN'T exist }

وفقط تفعل شيئا مثل أدناه:

function isNotDefined(value) {
  return typeof value === "undefined";
}

ووالذي يطلق عليه مثل:

isNotDefined(undefined); //return true
isNotDefined('Alireza'); //return false
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top